gpt4 book ai didi

c# - 从另一个更新一个依赖属性

转载 作者:太空狗 更新时间:2023-10-29 22:13:16 24 4
gpt4 key购买 nike

我有一个字符串依赖属性(SearchText),更新时,需要更新一个集合依赖属性(Results)。
我的收藏 dp:

public IEnumerable<string> Results{
get { return (IEnumerable<string>) GetValue(ResultsProperty); }
set { SetValue(ResultsProperty, value); }
}
public static readonly DependencyProperty ResultsProperty=
DependencyProperty.Register("Results", typeof(IEnumerable<string>), typeof(MainWindowVM), new UIPropertyMetadata(new List<string>()));

我试过了,但没有成功。我在 Results = .... 行中放置了一个断点,它从未被击中。

public string SearchText{
get { return (string) GetValue(SearchTextProperty); }
set {
Results =
from T in Tree.GetPeople(value)
select T.FullName;
SetValue(SearchTextProperty, value);
}
}
public static readonly DependencyProperty SearchTextProperty=
DependencyProperty.Register("SearchText", typeof(string), typeof(MainWindowVM), new UIPropertyMetadata(""));

XAML:

<TextBox DockPanel.Dock="Top" Text="{Binding SearchValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />

<ListBox DockPanel.Dock="Top" ItemsSource="{Binding NameResults}" SelectedItem="{Binding Search}" />

最佳答案

在 XAML 中或通过绑定(bind)设置依赖属性时,运行时将始终绕过实例属性别名并直接调用 GetValueSetValue。正因为如此,您的实例 setter 未被调用。

您可能希望考虑使用依赖属性注册一个方法,当属性更改时将调用该方法。这在为依赖属性创建 PropertyMetadata 时最容易完成。

我相信以下示例可以满足您的需求。在示例中,我的类有两个依赖属性,别名为 First 和 Second。当我为 First 设置值时,将调用我的更改处理程序并设置 Second 的值。

public class DependencyPropertyTest : DependencyObject
{
public static readonly DependencyProperty FirstProperty;
public static readonly DependencyProperty SecondProperty;

static DependencyPropertyTest()
{
FirstProperty = DependencyProperty.Register("FirstProperty",
typeof(bool),
typeof(DependencyPropertyTest),
new PropertyMetadata(false, FirstPropertyChanged));

SecondProperty = DependencyProperty.Register("SecondProperty",
typeof(string),
typeof(DependencyPropertyTest),
new PropertyMetadata(null));
} // End constructor

private bool First
{
get { return (bool)this.GetValue(FirstProperty); }
set { this.SetValue(FirstProperty, value); }

} // End property First

private string Second
{
get { return (string)this.GetValue(SecondProperty); }
set { this.SetValue(SecondProperty, value); }

} // End property Second

private static void FirstPropertyChanged(DependencyObject dependencyObject,
DependencyPropertyChangedEventArgs ea)
{
DependencyPropertyTest instance = dependencyObject as DependencyPropertyTest;

if (instance == null)
{
return;
}

instance.Second = String.Format("First is {0}.", ((bool)ea.NewValue).ToString());

} // End method FirstPropertyChanged
} // End class DependencyPropertyTest

希望对您有所帮助。

关于c# - 从另一个更新一个依赖属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1346934/

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