Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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# 将2个可观察集合相互绑定_C#_Wpf_User Controls_Observablecollection_Dependency Properties - Fatal编程技术网

C# 将2个可观察集合相互绑定

C# 将2个可观察集合相互绑定,c#,wpf,user-controls,observablecollection,dependency-properties,C#,Wpf,User Controls,Observablecollection,Dependency Properties,我有一个UserControl,在他的代码隐藏文件中有一个observeCollection作为DP。此控件用作TabControl(TabItem)的一部分 在TabControl的XAML中,UserControl的OrderList属性绑定到TabControl视图模型的Orders属性 <Grid> <my:OrderHistoryControl x:Name="orderHistoryControl"

我有一个
UserControl
,在他的代码隐藏文件中有一个
observeCollection
作为
DP
。此控件用作
TabControl
TabItem
)的一部分

TabControl
XAML
中,
UserControl
OrderList
属性绑定到
TabControl视图模型的
Orders
属性

<Grid>
    <my:OrderHistoryControl x:Name="orderHistoryControl"
                              OrderList="{Binding Orders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                              ExpanderOrderDetailsHeader="TEST TEST" />
</Grid>

但是,当我填写
可观收订单
(在
选项卡控件视图模型
中)时,我的
用户控件
上的
可观收订单列表
不会更新。
属性changedcallback
甚至没有被激发


我的usercontrol上还有一些其他控件,当我通过
选项卡control ViewModel
更改它们的文本字段时,效果很好。因此,我知道2
ObservableCollection
s之间的绑定有问题。有什么想法吗?

如果您说“当我填写ObservableCollection订单(在tabcontrol viewmodel中)时,我的usercontrol上的ObservableCollection订单列表没有更新”,您是否希望OrderList属性发生更改?或者列表中没有添加任何项目?另外,不要在依赖项属性的Register方法中使用new创建元素。否则,该类的每个瞬间共享相同的诽谤值,在本例中为一个集合。@dowhilefor。当我填写订单时,它应该更新usercontrol中的订单列表。我删除了这两个依赖项属性的新属性,但仍然没有更新Orderlist。这里的区别很重要:当您说“它应该更新Orderlist”时,我回答:不应该,因为您正在更改属性中的某些内容,而不是属性本身。如果指定了一个新集合,该集合实际上调用集合的setter,那么它也会更新视图上的属性。另外,我强烈建议您不要在视图模型中使用DependencyProperties。您的
ObservableCollection
是如何创建的,以及
PropertyChanged
通知是如何设置的?我也同意@DOWHILEFO的观点,即您真的不应该在ViewModel中使用DPs。可以这样想DPs:它们是指向另一个属性的指针,而不是实际属性本身。因此,您告诉您的
OrderList
去查看
Orders
DP以获取其值,并且您可能告诉
Orders
去内存中的某个地方查看以获取其值。我的最佳猜测是您的PropertyChange通知没有被解雇,因为“内存中的某个地方”不会引发属性更改通知:)
public static readonly DependencyProperty OrdersProperty =
       DependencyProperty.Register("Orders", typeof(ObservableCollection<Order>), typeof(AccountViewModel), new UIPropertyMetadata(new ObservableCollection<Order>()));

public ObservableCollection<Order> Orders
{
  get { return (ObservableCollection<Order>)GetValue(OrdersProperty); }
  set { SetValue(OrdersProperty, value); }
}
<Grid>
    <my:OrderHistoryControl x:Name="orderHistoryControl"
                              OrderList="{Binding Orders, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                              ExpanderOrderDetailsHeader="TEST TEST" />
</Grid>