gpt4 book ai didi

c# - 多实例依赖属性

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

所以我得到了一个我不喜欢的行为,我不知道如何解决它,假设我有一个简单的用户控件,其 DependencyProperty 如下所示:

public static readonly DependencyProperty CollectionProperty =
DependencyProperty.Register(
"Collection",
typeof (ObservableCollection<string>),
typeof (TestControl),
new PropertyMetadata(new ObservableCollection<string>()));

public ObservableCollection<string> Collection
{
get { return (ObservableCollection<string>) GetValue(CollectionProperty); }
set { SetValue(CollectionProperty, value); }
}

然后我创建了这个控件的 2 个不同的实例,注意我在一个控件中添加了“Hello”,在第二个控件中添加了“World”,用户控件只包含一个显示 DependencyProperty 的 ItemsControl 我们已创建。

<chartsTest:TestControl Background="Red">
<chartsTest:TestControl.Collection>
<system:String>hello</system:String>
</chartsTest:TestControl.Collection>
</chartsTest:TestControl>
<chartsTest:TestControl Background="Blue">
<chartsTest:TestControl.Collection>
<system:String>World</system:String>
</chartsTest:TestControl.Collection>
</chartsTest:TestControl>

我在两个控件中都得到了“Hello World”:

enter image description here

我想我明白发生这种情况是因为默认集合被初始化为静态变量,好的,但是我该如何为每个实例初始化它?

我知道如果我使用这个语法它会起作用:

<chartsTest:TestControl Background="Blue" x:Name="TestControl" 
Collection="{Binding Path=TestProperty}">
</chartsTest:TestControl>

有没有办法让两者都起作用?我希望我足够清楚,这是一个简单的例子,试图说明我的问题。

最佳答案

请记住,任何 DP 都应声明为静态,因此应初始化该值。

在您的 UserControl (TestControl) 的构造函数中,初始化您的 Collection 属性:

更新:

SetCurrentValue(CollectionProperty, new List<string>());

我们可以通过以下方式测试它:

<local:TestControl Background="Red">
<local:TestControl.Collection>
<system:String>hello</system:String>
</local:TestControl.Collection>
</local:TestControl>

<local:TestControl Background="Blue">
<system:String>world</system:String>
</local:TestControl>

<local:TestControl Background="Green" Collection="{Binding List}"/>

顺便说一句,如果您不收听列表的项目更改,我建议改用列表。

关于c# - 多实例依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34781511/

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