0

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代码已被删除,因为站点编辑器不允许“大部分代码”。此代码不需要“模式详细信息”。

4

2 回答 2

1

WPF 不支持绑定到字段。只有属性

改变你的班级

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 中创建绑定,而不是过程代码。

另外,请记住,如果您以后要修改 的这些值,除非您充分实施 INotifyPropertyChangedA,B,C,否则这些更改将不会反映。

请习惯 C# 符号,像这样放置“埃及大括号”:

public class MyClass {
    //...Etc    
}

而不是正确的方式

 public class MyClass
 {
      //...Etc
 }

让我想呕吐,因为与糟糕的 java 东西相似。

于 2013-05-01T15:52:52.480 回答
0

看起来您正试图让ABCClass'ToString值显示在TextBoxnamedtxtKey中。如果是这种情况,您根本不需要转换器,因为 a 的默认行为是在非字符串对象绑定到字符串属性时Binding使用该值(在这种情况下)。ToStringTextBox.Text

尽管不必为您的A,B,C值使用属性来支持这种情况,但通常使用公共字段是不好的做法,因此您应该考虑将它们设为私有或用属性包装它们。

于 2013-05-01T17:45:47.573 回答