通过包含的对象绑定WPF的问题

时间:2015-01-05 05:22:33

标签: c# wpf xaml data-binding

我试图将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添加到传递元素,但这没有帮助,我猜想只会增加混乱。

由于这是一个很大的代码而且相当复杂,我希望我已经给出了足够的关键元素来帮助你理解我正在做的事情。希望有一种方法允许这种类型的绑定,因为它将大大增强我正在做的事情。

无论您给予什么帮助,我们将不胜感激, 保罗

0 个答案:

没有答案