gpt4 book ai didi

c# - 在 XAML 中从 DependecyProperty 绑定(bind)到 DataContext (ViewModel)

转载 作者:行者123 更新时间:2023-11-30 14:13:59 24 4
gpt4 key购买 nike

假设这种情况:
我用 DependencyProperty“SuperValue”创建了一个新控件(“MyControl”)。
现在,在 XAML 中,我将“SuperValue”设置为“TestValue”:

<local:MyControl SuperValue="TestValue" />

此控件有一个 ViewModel (DataContext)。
我想将 DependencyProperty 的值(在此示例中为“TestValue”)传递给 ViewModel 中的属性。

我该怎么做?

假设我的控件的 ViewModel 做了一些计算,例如:用户输入国家名称,控件给他一个当前时间。

问题是:如何提供计算结果?假设这是 ViewModel 中的公共(public)属性“Results”。我想创建一个像“TextBox.Text”、“ListView.SelectedItem”这样的属性,它向“外部”提供部分 ViewModel 数据。

例如 TextBox 和 Text 属性:

<TextBox Text={Binding GiveMeTextValue} />

在这种情况下,DP“文本”向外部提供当前存储输入文本的 ViewModel 属性。

我想以同样的方式使用我的控件。

最佳答案

我不知道我是否答对了您的问题:您想将 XAML 中的静态非绑定(bind)值设置为控件的 DependencyProperty,并将控件的 DataContext 上的属性设置为该静态值?如果您需要这样做,您的概念有问题,为什么不在相应字段中的 ViewModel 上提供此值并将控件的 DP 绑定(bind)到此字段?

然而,你能做什么就得到你想要的:

在注册 DP 时定义一个 PropertyChangedCallback:

// Dependency Property
public static readonly DependencyProperty TestProperty =
DependencyProperty.Register("Test", typeof(string),
typeof(MyControl), new FrameworkPropertyMetadata("123", new PropertyChangedCallback(OnTestChanged)));

在 OnTestChanged 方法中,将您的 DataContext 转换为您的 ViewModel 的类型,并将 ViewModel 上的相应值设置为新值:

private static void OnTestChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
MyControl c = d as MyControl;
ViewModelType vm = c.DataContext as ViewModelType;
vm.Property = e.New;
Console.WriteLine(e.NewValue);
}

这就是你要的吗?

关于c# - 在 XAML 中从 DependecyProperty 绑定(bind)到 DataContext (ViewModel),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13052100/

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