2013-05-01 3 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 для отображения в TextBox с именем txtKey. Если это так, вам совсем не нужен конвертер, потому что поведение по умолчанию для Binding заключается в использовании значения ToString, когда нестроковый объект привязан к строковому свойству (TextBox.Text в этом случае).

Несмотря на то, что для поддержки этого сценария нет необходимости использовать свойства для значений A,B,C, использовать общедоступные поля - это плохая практика, поэтому вам следует подумать о том, чтобы сделать их частными или обернуть их свойствами.

Смежные вопросы