WPF数据绑定到Size属性
我在WPF中有数据绑定问题,这是我的示例类:
public class testClass { public Size testInnerSize; public testClass() { testInnerSize = new Size(66, 99); } }
我想将我的表单中的TextBox绑定到testInnerSize的属性,让我们说Width。 所以我将此文本框的DataContext设置为testClass对象和XAML:
<TextBox Text="{Binding Path=testInnerSize.Width }" Name="textBox3" (...)
但是它不起作用,文本框是空的而不是值66.另一方面,当我将DataContext设置为testObject.testInnerSize时,该值显示在文本框中,但在文本修改后它不会在对象中更新。
所以问题是:我如何双向绑定作为另一个对象属性的Size对象的Width属性?
用于测试的完整代码:
public partial class testpage : Page { public Size testSize; testClass testObject = new testClass(); public testpage() { InitializeComponent(); testSize = new Size(6, 9); textBox2.DataContext = testSize; textBox3.DataContext = testObject; } private void textChanged(object sender, TextChangedEventArgs e) { MessageBox.Show(testObject.testInnerSize.Width + " " + testObject.testInnerSize.Height, "", MessageBoxButton.OK); } } public class testClass { public Size testInnerSize; public testClass() { testInnerSize = new Size(66, 99); } }
XAML绑定:
更新1
现在我检查了它并不依赖于作为testClass对象的子对象 – testSize属性被绑定,因此其文本框显示正确的值,但testSize.Width值未更新。 要看它只是添加:
private void text1Changed(object sender, TextChangedEventArgs e) { MessageBox.Show(testSize.Width + " " + testSize.Height, "", MessageBoxButton.OK); }
处理TextChanged事件。
您的testInnerSize不是属性。 这是一个领域。 属性具有get和set访问器。 您还应该实现INotifyPropertyChanged。
属性(C#编程指南)
数据绑定概述
首先,如果您想在WPF中使用数据绑定,则应声明除Field之外的Property。 所以你的testClass
应该是这样的:
public class testClass { public Size testInnerSize { get; set; } public testClass() { testInnerSize = new Size(66, 99); } }
如果您想利用双向绑定,则需要引入INotifyPropertyChanged接口。
public class testClass : INotifyPropertyChanged { private Size _testInnerSize; public event PropertyChangedEventHandler PropertyChanged; public Size testInnerSize { get { return this._testInnerSize; } set { this._testInnerSize = value; if (null != PropertyChanged) { this.PropertyChanged(this, new PropertyChangedEventArgs("testInnerSize")); } } } public testClass() { testInnerSize = new Size(66, 99); } }
有关详细信息,您可以在第一个答案中查看链接。