2013-05-01 101 views
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代码被删除,因为网站编辑不允许 “大多代码”。此代码不需要“模式详细信息”。

回答

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#符号,把“埃及括号”像这样:

public class MyClass { 
    //...Etc  
} 

而不是正确的方式

public class MyClass 
{ 
     //...Etc 
} 

让我想因为相似性的呕吐蹩脚的Java的东西。

0

它看起来像你试图让ABCClassToString值显示在名为txtKeyTextBox中。如果是这种情况,则根本不需要转换器,因为Binding的默认行为是在将非字符串对象绑定到字符串属性(本例中为TextBox.Text)时使用ToString值。

虽然没有必要使用A,B,C值的属性来支持此场景,但通常使用公用字段是不好的做法,因此您应该考虑将它们设置为私有或用属性包装它们。