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
更改它们的文本字段时,效果很好。因此,我知道2ObservableCollection
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>