我有一个附加到视图类的视图模型,该视图类的控件属性导致绑定错误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')
该源曾经存在于Visual Studio 2015中创建的单个WPF应用程序模板中,可能针对.NET 4.6.1。此来源有效。该属性是公共的,并在视图模型中实例化。
自从将视图模型移动到Visual Studio 2017中以4.5.1为目标的可移植C#库后,出现了绑定错误。结果,在Application.Current调度程序线程上调用ObservableCollection.Add不会导致ItemsControl更新。该应用程序项目是在Visual Studio 2017中针对.NET 4.6.1创建的WPF模板。这包括WindowsBase,PresentationCore等。dll位于bin中,是最新的,并且在运行时可以正确解析。调试控制台中没有异常。
组装分离是否引起我不知道的问题?即使.NET框架相同(我假定向后兼容,最低要求),环境是否有可能导致此问题(VC编译器?)或框架(IEnumerable与ObservableCollection)的变化。