如何在没有Converter
的情况下使用绑定,如下面的评论代码?
public partial class MainWindow : Window
{
public MainWindow()
{ABC = new ABCClass();
InitializeComponent();
//Binding binding = new Binding();
//binding.Source = this;
//binding.Path = new PropertyPath("ABC");
//binding.Mode = BindingMode.OneWay;
//txtKey.SetBinding(TextBox.TextProperty, binding);
Binding binding = new Binding();
binding.Source = this;
binding.Path = new PropertyPath("ABC");
binding.Mode = BindingMode.OneWay;
binding.Converter = new ABCTypeConverter();
txtKey.SetBinding(TextBox.TextProperty, binding);
}
班级和Converter
:
public ABCClass ABC { get; set; }
}
public class ABCClass
{
public int A = 1;
public int B = 2;
public int C = 3;
public override string ToString()
{
return (A + B + C).ToString();
}
}
Converter
代码已删除,因为网站编辑器不允许“主要是代码”。此代码不需要“模式详细信息”。
答案 0 :(得分:1)
WPF不支持绑定到字段。只有Properties:
更改课程
public class ABCClass
{
public int A = 1;
public int B = 2;
public int C = 3;
public override string ToString()
{
return (A + B + C).ToString();
}
}
为此:
public class ABCClass
{
public int A {get;set;}
public int B {get;set;}
public int C {get;set;}
public override string ToString()
{
return (A + B + C).ToString();
}
public ABCClass()
{
A = 1;
B = 2;
C = 3;
}
}
顺便说一句,您应该在XAML中创建绑定,而不是在程序代码中创建绑定。
此外,请注意,如果您以后想要修改A,B,C
的这些值,则除非您Implement INotifyPropertyChanged充分,否则不会反映这些更改。
然后,请习惯C#表示法,将“egyptian braces”放在这样:
public class MyClass {
//...Etc
}
而不是正确的方式
public class MyClass
{
//...Etc
}
因为与糟糕的java东西相似而让我想要VOMIT。
答案 1 :(得分:0)
您好像要在名为ABCClass
的{{1}}中显示ToString
的{{1}}值。如果是这种情况,则根本不需要转换器,因为TextBox
的默认行为是在非字符串对象绑定到字符串属性时使用txtKey
值(Binding
在这种情况下{1}}。
虽然没有必要使用ToString
值的属性来支持这种情况,但一般来说使用公共字段是不好的做法,所以你应该考虑将它们设为私有或用属性包装它们。