Свойство Binding Text в ComboBox не работает - PullRequest
2 голосов
/ 15 марта 2012

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

Это 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; }
    }
}

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

Ответы [ 2 ]

1 голос
/ 15 марта 2012

Ваш класс данных должен реализовать 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 голосов
/ 15 марта 2012

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

Кстати, 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

...