Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过包含的对象进行WPF绑定时出现问题_C#_Wpf_Xaml_Data Binding - Fatal编程技术网

C# 通过包含的对象进行WPF绑定时出现问题

C# 通过包含的对象进行WPF绑定时出现问题,c#,wpf,xaml,data-binding,C#,Wpf,Xaml,Data Binding,我试图使用WPF绑定到DataContext对象包含的对象,但该对象不起作用 如果我将所有绑定元素放置在DataContext ViewModel对象中,一切都会正常工作,但是如果我将数据列表和数据元素分离到ViewModel类所包含的单独类中,ListBox数据将正常工作,但与各个数据元素的绑定不正常 通过实验,我假设绑定的对象需要直接绑定到DataContext ViewModel类。我可以做到这一点,但它并不像我希望的那样面向对象或可重用。我已经将ListBox的数据列表分离到它自己的类中

我试图使用WPF绑定到DataContext对象包含的对象,但该对象不起作用

如果我将所有绑定元素放置在DataContext ViewModel对象中,一切都会正常工作,但是如果我将数据列表和数据元素分离到ViewModel类所包含的单独类中,ListBox数据将正常工作,但与各个数据元素的绑定不正常

通过实验,我假设绑定的对象需要直接绑定到DataContext ViewModel类。我可以做到这一点,但它并不像我希望的那样面向对象或可重用。我已经将ListBox的数据列表分离到它自己的类中,并且我假设因为它是一个可观察的集合,所以不管它是否附加到包含的对象,它都可以工作。由于对象的各个数据元素仅通过OnPropertyChanged通知,因此无论我尝试了什么,我都无法让WPF表单识别数据,即使DataContext.CurrentRecord显示了正确的数据。我只能假设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; }
}
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");
    }
}
公共可观察收集项目
{
获取{return ItemListMgr.Items;}
设置{ItemListMgr.Items=value;}
}
公共项模型CurrentItem
{
获取{return ItemListMgr.CurrentItem;}
设置{ItemListMgr.CurrentItem=value;}
}
包含的ItemListMgr对象中对应的代码如下:

public ObservableCollection<ItemModel> Items
{
    get { return ItemListMgr.Items; }
    set { ItemListMgr.Items = value; }
}

public ItemModel CurrentItem
{
    get { return ItemListMgr.CurrentItem; }
    set { ItemListMgr.CurrentItem = value; }
}
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");
    }
}
public readonly ItemListModel\u ItemList;
公共可观测收集项目
{
获取{return\u ItemList.Items;}
设置
{
_ItemList.Items=值;
不动产变更(“项目”);
}
}
私有项目模型_currentItem;
公共项模型CurrentItem
{
获取{return\u currentItem;}
设置
{
_currentItem=值;
OnPropertyChanged(“当前项目”);
}
}
“Items”对象是显示的列表,即使使用包含的对象“ItemListMgr”,这一部分仍然非常有效。当用户滚动列表时,CurrentItem被设置为“Items”中的活动项,但即使WPF数据输入元素绑定到CurrentItem元素,当我滚动列表时,它们也不会改变

绑定文本框的Xaml代码如下所示: Text=“{Binding CurrentItem.ItemName,Mode=TwoWay,NotifyOnValidationError=True,ValidatesOnDaerRors=True}”

Xaml代码绑定到DataContext对象,该对象使用到包含的ItemListMgr类的简单传递。我曾尝试将OnPropertyChange添加到pass-through元素中,但没有任何帮助,我猜这只会增加混乱

由于这是一个大量的代码和相当复杂的,我希望我已经给出了足够的关键元素,让您理解我在做什么。希望有一种方法允许这种类型的绑定,因为它将极大地增强我正在做的事情

无论您能给予什么帮助,我们都将不胜感激,
Paul

尝试在ViewModel上使用OnPropertyChanged,而不仅仅是在管理器上。默认情况下,
文本框
绑定是
LostFocus
尝试将其添加到绑定中
UpdateSourceTrigger=PropertyChanged