DependencyProperty更改子属性更改

时间:2018-01-04 13:32:24

标签: c# uwp dependency-properties

在我的UWP应用程序中,我有一个带有List的对象,如下所示:

public partial class Test
{
    public int Id { get; set; }
    public string Name { get; set; }
    public List<string> MyList{ get; set; }
}

现在我想在我的Page1中使用一个类型为Test的DependencyProperty的UserControl。它应该使用绑定到Test.MyList的ItemSoure更新ListView。

如果我将一个Item添加到Test.MyList,我希望ListView刷新并显示新的Item,但是如果只更改了“child property”,我还没想出如何更新DependencyProperty。

2 个答案:

答案 0 :(得分:2)

DependencyProperty 在这里无关,对于 ListView.ItemsSource 使用实现 INotifyCollectionChanged 的集合 - 这里提到了一个很好的例子{ {3}}。此类集合将自动通知UI其更改。

示例可能如下所示 - 在用户控件中定义DP:

public Test MyData
{
    get { return (Test)GetValue(MyDataProperty); }
    set { SetValue(MyDataProperty, value); }
}

public static readonly DependencyProperty MyDataProperty =
    DependencyProperty.Register("MyData", typeof(Test), typeof(TestControl), new PropertyMetadata(null));

在xaml中 - 使用绑定将其设置为 ListView 的源:

<ListView Header="{x:Bind MyData.Name}" ItemsSource="{x:Bind MyData.MyList}"/>

完成后,只需在页面中使用它:

<local:TestControl Grid.Row="0" Grid.Column="0" MyData="{x:Bind FirstTest}"/>
<local:TestControl Grid.Row="0" Grid.Column="1" MyData="{x:Bind SecondTest}"/>

当你在后面的一个集合中添加/删除元素时,它应该在UI中更新。几个评论 - 我在这里使用OneTime绑定,至于这个示例的目的,它不需要其他方式。您还可以考虑在 Test 类中实现 INotifyPropertyChanged ,以通知UI有关其他属性的更改。

工作样本,您可以在ObservableCollection查看。

答案 1 :(得分:1)

您应切换到ObservableCollection,在更新属性后,请致电mycollection.Refresh()