Как связать свойство со свойством другого класса (без UI Control)?
Я трачу часы на Google, исследуя мою простую задачу. Я пытаюсь сделать привязку моей переменной TestString к 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));
}
}
}
Спасибо вам, ребята!
1 ответ
Попробуйте установить Source
собственность вашего связывания
BindingOperations.SetBinding(TestClass, BindingTestClass.MeinStringProperty,
new Binding("TestString") { Source=this, UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged });
По умолчанию привязки используют .DataContext
в качестве источника для привязки, однако в вашем случае TestClass
не имеет своего .DataContext
установить на что угодно. На самом деле, я даже не уверен, действительно ли это свойство на DependencyObject
,
Обычно .DataContext
наследуется от родителя объекта в визуальном дереве WPF, но так как TestClass
не является частью вашего визуального дерева, ему нечего унаследовать.