我试图将WPF绑定用于DataContext对象包含的对象,但它无法正常工作。
如果我将所有绑定元素放在DataContext ViewModel对象中,一切正常,但如果我将数据列表和数据元素分离到ViewModel类包含的单独类中,则ListBox数据将起作用,但绑定单个数据元素不起作用。
通过我的实验,我假设绑定对象需要直接绑定到DataContext ViewModel类。我能做到这一点并且有效,但它并不像我希望的那样面向对象或可重用。我已将ListBox的数据列表分离到它自己的类中,我假设因为它是一个ObservableCollection,无论它是否附加到包含的对象,它都可以工作。由于对象的各个数据元素仅通过OnPropertyChanged通知,无论我尝试过什么,即使DataContext.CurrentRecord显示正确的数据,我也无法获取WPF表单来识别数据。我只能假设OnPropertyChanged通知不会发送到我需要的位置。
DataContext ViewModel的部分代码如下:
public ObservableCollection<ItemModel> Items
{
get { return ItemListMgr.Items; }
set { ItemListMgr.Items = value; }
}
public ItemModel CurrentItem
{
get { return ItemListMgr.CurrentItem; }
set { ItemListMgr.CurrentItem = value; }
}
Contained ItemListMgr对象中的对应代码如下:
public readonly ItemListModel _ItemList;
public ObservableCollection<ItemModel> Items
{
get { return _ItemList.Items; }
set
{
_ItemList.Items = value;
OnPropertyChanged("Items");
}
}
private ItemModel _currentItem;
public ItemModel CurrentItem
{
get { return _currentItem; }
set
{
_currentItem = value;
OnPropertyChanged("CurrentItem");
}
}
&#34; Items&#34; object是显示的列表,甚至使用包含的对象&#34; ItemListMgr&#34;,这部分仍然很好用。当用户滚动列表时,CurrentItem被设置为&#34; Items&#34;中的活动项,但即使WPF数据条目元素绑定到CurrentItem元素,当我滚动列表时它们也不会改变。
绑定文本框的Xaml代码如下: Text =&#34; {Binding CurrentItem.ItemName,Mode = TwoWay,NotifyOnValidationError = True,ValidatesOnDataErrors = True}&#34;
Xaml代码绑定到DataContext对象,该对象使用简单的传递到包含的ItemListMgr类。我试图将OnPropertyChange添加到传递元素,但这没有帮助,我猜想只会增加混乱。
由于这是一个很大的代码而且相当复杂,我希望我已经给出了足够的关键元素来帮助你理解我正在做的事情。希望有一种方法允许这种类型的绑定,因为它将大大增强我正在做的事情。
无论您给予什么帮助,我们将不胜感激, 保罗