2012-03-15 3 views
2

У меня есть приложение WPF, содержащее несколько ComboBoxes. ItemsSource некоторых из списков привязок привязан к списку объектов. Я хочу привязать текстовое свойство каждой выпадающей строки к некоторому свойству MyObject. Каждый раз, когда пользователь выбирает какую-либо строку в MyListView, я обновляю свойства MyObject и хочу, чтобы текстовые свойства comboboxes также обновлялись.Свойство Binding Text в ComboBox не работает

Это XAML для одного из Наримера:

<StackPanel Orientation="Vertical" x:Name="StackPanel_MyStackPanel"> 
    <ComboBox x:Name="comboBox_MyComboBox" 
       IsEditable="True" 
       ItemsSource="{Binding}" 
       Text="{Binding Path=MyProperty}" /> 
</StackPanel> 

В коде позади:

MyObject myObject = new MyObject(); 

// On the selection changed event handler of the MyListView, 
// I update the MyProperty of the myObject. 

this.StackPanel_MyStackPanel.DataContext = myObject; 

определение MyObject:

public class MyObject 
{ 
    private string _MyProperty; 

    public string MyProperty 
    { 
     get { return _MyProperty; } 
     set { _MyProperty = value; } 
    } 
} 

Это не работает. ... и я не знаю почему.

+0

Когда именно вы обновляете 'myObject.MyProperty', до или после назначения' это. StackPanel_MyStackPanel.DataContext = myObject'? – Clemens

+0

Я хочу связать свойство Text из comboBox с MyObject.MyProperty, ItemSource ComboBox привязан к некоторой коллекции в моем коде позади - я не упоминал здесь, в какую коллекцию. –

+0

@Clemens После того, как я назначил this.StackPanel_MyStackPanel.DataContext = myObject –

ответ

1

Ваш класс данных должен реализовать INotifyPropertyChanged:

public class MyObject : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private string _MyProperty; 
    public string MyProperty 
    { 
     get { return _MyProperty;} 
     set 
     { 
      _MyProperty = value; 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs("MyProperty")); 
      } 
     } 
    } 
} 
0

Для меня это работает ..

кстати, ItemsSource для элементов в выпадающем списке, вам не нужно устанавливать его здесь

Я добавил кнопку для тестирования ... это мой отделенный код:

MyObject myObject = new MyObject(); 

/// <summary> 
/// Initializes a new instance of the <see cref="MainView"/> class. 
/// </summary> 
public MainView() 
{ 
    InitializeComponent(); 


    //On the selection changed event handler of the MyListView , I update the 
    //MyProperty of the myObject. 

    this.StackPanel_MyStackPanel.DataContext = myObject; 

} 

private void test_Click(object sender, System.Windows.RoutedEventArgs e) 
{ 
    MessageBox.Show(myObject.MyProperty); 
} 

моего XAML:

<StackPanel x:Name="StackPanel_MyStackPanel" 
      Width="Auto" 
      Height="Auto" 
      Orientation="Vertical"> 
    <ComboBox x:Name="comboBox_MyComboBox" 
       IsEditable="True" 
       Text="{Binding Path=MyProperty}" /> 
    <Button Name="test" Click="test_Click" Content="Show it" /> 
</StackPanel> 

Я взял вашу реализацию MyObject, но переименовали вашу локальную переменную _MyProperty - это MyPropety

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