c# - 子属性更改的 DependencyProperty 更新

标签 c# uwp dependency-properties

在我的 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/

相关文章:

c# - 替换 PL/SQL 中的特殊 XML 字符

c# - 保存 .NET 用户设置需要很长时间

wpf - 依赖 属性依赖于另一个

c# - 2路跨进程通信

c# - 为什么 "YYYY-MM-DD HH' :'MM' :'SS"日期时间格式显示不正确?

windows - Windows 上的应用程序容器是什么?

c# - 如何在通用 Windows 10 应用程序中自定义文本框的边框和背景?

c# - UWP 中有 HttpListener 吗?

wpf - app.xaml.cs 中的依赖属性

c# - 当依赖项依赖的变量或字段发生更改时更新依赖项属性