У меня есть модель представления, прикрепленная к классу представления, свойства элемента управления которого приводят к ошибке привязки 40. Представление - это пользовательский элемент управления, действующий как ItemsControl.
<ItemsControl ItemsSource = "{Binding TaskList}" >
<ItemsControl.ItemTemplate>
<DataTemplate>
<local:TaskItemUserControl />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
ItemsSource привязан к ObservableCollection в модели просмотра.
using Helpers.System;
using System.Collections.ObjectModel;
namespace ApplicationCore
{
/// <summary>
/// View model container is a list view for task list item controls
/// </summary>
public class TaskListViewModel : BaseViewModel
{
#region properties
/// <summary>
/// Runtime data to show in the task control list
/// </summary>
public ObservableCollection<TaskItemViewModel> TaskList =
new ObservableCollection<TaskItemViewModel>();
#endregion
}
}
При переходе на страницу, на которой размещен ItemsControl, появляется ошибка привязки.
System.Windows.Data Error: 40 : BindingExpression path error: 'TaskList' property not found on 'object' ''TaskListViewModel' (HashCode=3416986)'. BindingExpression:Path=TaskList; DataItem='TaskListViewModel' (HashCode=3416986); target element is 'ItemsControl' (Name=''); target property is 'ItemsSource' (type 'IEnumerable')
Источник существовал в одном шаблоне приложения WPF, созданном в Visual Studio 2015, вероятно, предназначенном для .NET 4.6.1. Этот источник работал. Свойство является общедоступным и создается в модели просмотра.
После перемещения модели представления в переносимую библиотеку C#, нацеленную на 4.5.1 в Visual Studio 2017, появилась ошибка привязки. В результате вызов ObservableCollection.Add в потоке диспетчера Application.Current не приводит к обновлению ItemsControl. Проект приложения представляет собой шаблон WPF, созданный в Visual Studio 2017 для .NET 4.6.1. Это включает в себя WindowsBase, PresentationCore и т. д. DLL-файлы существуют в bin, обновлены и правильно разрешаются во время выполнения. В консоли отладки не отображаются исключения.
Вызывает ли разделение сборки проблему, о которой я не знаю? Есть ли изменение в среде, которое могло вызвать это (компилятор VC?) Или фреймворк (IEnumerable против ObservableCollection), даже если платформа .NET такая же (я предполагаю, как минимум, обратную совместимость).
Ооо! Хорошее место, я попробую, когда вернусь. Удивлен, что это сработало так ... файл, должно быть, изменился во время переноса.
@Clemens Большое спасибо.





Это должно быть свойство, а не поле:
public ObservableCollection<TaskItemViewModel> TaskList { get; } = ...