Привязка не обновляется, если используется путь - PullRequest
2 голосов
/ 23 марта 2011

В моем главном окне у меня есть коллекция ObservableCollection, которая отображается в списке для каждой привязки.

Если я обновлю свою Коллекцию, модификация будет показана в списке.

Это работает:

public ObservableCollection<double> arr = new ObservableCollection<double>();

public MainWindow()
{
            arr.Add(1.1);
            arr.Add(2.2);
            testlist.DataContext = arr;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
   arr[0] += 1.0;
}
<ListBox Name="testlist" ItemsSource="{Binding}"></ListBox>

Эта версия не работает:

public ObservableCollection<double> arr = new ObservableCollection<double>();

public MainWindow()
{
            arr.Add(1.1);
            arr.Add(2.2);
            testlist.DataContext = this;
}

private void Button_Click(object sender, RoutedEventArgs e)
{
   arr[0] += 1.0;
}
<ListBox Name="testlist" ItemsSource="{Binding Path=arr}"></ListBox>

Можете ли вы сказать мне, почему? Я хотел бы указать this как DataContext, потому что в моем диалоге есть много других свойств, и было бы неплохо, если бы мне не пришлось устанавливать DataContext для каждого отдельного элемента управления.

Ответы [ 2 ]

5 голосов
/ 23 марта 2011

Вам нужно выставить свою коллекцию как собственность, прямо сейчас это поле. Так что сделайте arr private снова и добавьте:

public ObservableCollection<double> Arr {
    get {
        return this.arr;
    }
}

Тогда вы сможете связываться как {Binding Path=Arr}, предполагая, что this является текущим DataContext.

4 голосов
/ 23 марта 2011

Невозможно привязать поле, только свойство. Попробуйте обернуть arr в свойстве, и вы увидите, что оно отлично работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...