gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:36:30 25 4
gpt4 key购买 nike

在我的 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。它应该使用绑定(bind)到 Test.MyList 的 ItemSoure 更新 ListView。

如果我将一个项目添加到 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com