在我的 UWP 应用程序中,我有一个内部带有列表的对象,如下所示:
public partial class Test
{
public int Id { get; set; }
public string Name { get; set; }
public List<string> MyList{ get; set; }
}
现在我想要在我的 Page1 中有一个具有 Test
类型的 DependencyProperty 的 UserControl。它应该更新 ListView,其中 ItemSoure 绑定(bind)到 Test.MyList。
如果我向 Test.MyList 添加一个项目,我希望 ListView 刷新并显示新项目,但我还没有弄清楚如何在仅更改“子属性”的情况下更新 DependencyProperty。
最佳答案
DependencyProperty在这里无关,因为ListView.ItemsSource使用实现INotifyCollectionChanged的集合 - ObservableCollection之前提到了一个很好的例子。此类集合将自动通知 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 中 - 使用绑定(bind)将其设置为 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 绑定(bind),就本示例的目的而言,不需要其他方式。您还可以考虑在您的 Test 类中实现 INotifyPropertyChanged 来通知 UI 有关其他属性的更改。
您可以在 GitHub 查看工作示例。
关于c# - 子属性更改的 DependencyProperty 更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48096449/