2013-05-01 100 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值的屬性來支持此場景,但通常使用公用字段是不好的做法,因此您應該考慮將它們設置爲私有或用屬性包裝它們。