绑定到一个类的属性

时间:2013-05-01 15:43:41

标签: wpf binding properties converter

如何在没有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代码已删除,因为网站编辑器不允许“主要是代码”。此代码不需要“模式详细信息”。

2 个答案:

答案 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值的属性来支持这种情况,但一般来说使用公共字段是不好的做法,所以你应该考虑将它们设为私有或用属性包装它们。