在我的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。
答案 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()