gpt4 book ai didi

c# - 如何将属性绑定(bind)到另一个类的属性(没有 UI 控件)?

转载 作者:太空宇宙 更新时间:2023-11-03 23:39:40 24 4
gpt4 key购买 nike

我在 Google 上花费数小时研究我的简单任务。我正在尝试将我的变量 TestString 绑定(bind)到 TestClass.MeinString

如果我点击按钮“tb_tbBinding”,TestString 和 TestClass.MyString 应该保持相同的值。

相关代码:

public partial class Window_Test : Window, INotifyPropertyChanged
{
public Window_Test()
{
InitializeComponent();
DataContext = this;

// Trying to bind TestClass.MeinString to TestString
BindingOperations.SetBinding(TestClass, BindingTestClass.MeinStringProperty, new Binding("TestClass.MeinString") { UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
}



string _TestString = "Hello World!";
public string TestString
{
get
{
return _TestString;
}
set
{
_TestString = value;
OnPropertyChanged("TestString");
}
}

BindingTestClass _TestClass = new BindingTestClass("Hallo Lukas!");
public BindingTestClass TestClass
{
get
{
return _TestClass;
}
set
{
_TestClass = value;
OnPropertyChanged("TestClass");
}
}

private void btn_testclasschanger_click(object sender, RoutedEventArgs e)
{
TestClass.MeinString = "Changed String!";
}

private void btn_teststringchanger_click(object sender, RoutedEventArgs e)
{
TestString = "Changed Class!";
}

}

我的自定义类:

 public class BindingTestClass : DependencyObject, INotifyPropertyChanged
{
public BindingTestClass(string myString)
{
MeinString = myString;
}

public string MeinString
{
get
{
return (string)GetValue(MeinStringProperty);
}
set
{
SetValue(MeinStringProperty, value);
OnPropertyChanged("MeinString");
}
}

public static readonly DependencyProperty MeinStringProperty = DependencyProperty.Register("MeinString", typeof(string), typeof(BindingTestClass), new FrameworkPropertyMetadata()
{
BindsTwoWayByDefault = true,
DefaultUpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged
});

public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}

谢谢大家!

最佳答案

尝试设置绑定(bind)的 Source 属性

BindingOperations.SetBinding(TestClass, BindingTestClass.MeinStringProperty, 
new Binding("TestString") { Source=this, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });

默认情况下,绑定(bind)使用 .DataContext 作为绑定(bind)的源,但是在您的情况下,TestClass 没有设置其 .DataContext任何事情。事实上,我什至不确定这是否是 DependencyObject 上的有效属性。

通常 .DataContext 继承自 WPF 可视化树中对象的父级,但由于 TestClass 不是您的可视化树的一部分,因此它没有任何可继承的对象.

关于c# - 如何将属性绑定(bind)到另一个类的属性(没有 UI 控件)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29543287/

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