WPF - флажок привязан к тому, содержит ли ObservableCollection значение? - PullRequest
1 голос
/ 18 декабря 2010

В настоящее время у меня есть флажок, который привязан к свойству, которое проверяет ObservableCollection для определенного значения.Если значение существует, то свойство возвращает true.

Мое свойство и свойство, предоставляющее ObservableCollection, доступны только для чтения.

Этот подход работает нормально, когда я сначала загружаю свою модель, но когда онадобавьте дополнительные элементы в ObservableCollection, флажок, который привязан к свойству, не обновляется.

Вот код для моей собственности:

public bool IsMeasure11
{
    get //readonly
    {
       return this.Charges.Any(t => t.IsMeasure11);
    }
}

А вот код для моей ObservableCollection:

public ObservableCollection<DACharge> Charges
{
    get //readonly
    {
        if (_charges == null)
        {
             _charges = new GenericEntityCollection<DACharge>(_DACase.Id).ToList().ToObservableCollection();
        }

        return _charges;
    }
}

И XAML для флажка:

<CheckBox Content="M11" Name="chkM11" IsChecked="{Binding IsMeasure11, Mode=OneWay}">

Заранее спасибо,Sonny

Ответы [ 3 ]

1 голос
/ 18 декабря 2010

Вам необходимо аннулировать привязку IsMeasure11 (т.е. вызывать событие PropertyChanged объекта INotifyPropertyChanged) всякий раз, когда изменяется коллекция Charges. Один из способов сделать это - подписаться на событие CollectionChanged коллекции Charges.

// somewhere, maybe the constructor of your view model
this.Charges.CollectionChanged += ChargesChanged;

private void ChargesChanged(object sender, NotifyCollectionChangedEventArgs e)
{
  this.NotifyOfPropertyChanged(() => IsMeasure11);
}
1 голос
/ 18 декабря 2010

Ваше свойство не влияет INotifyPropertyChanged , поэтому механизм привязки не может узнать об обновлении связанного свойства.

ObservableCollection<T> не обновляет свойство, которым оно являетсябыть возвращенным внутрь;в этом случае свойство public ObservableCollection<DACharge> Charges.

Вам необходимо зарегистрироваться для события ObservableCollection.CollectionChanged , а также при добавлении / удалении элемента и т. д. ... запускать PropertyChangedсобытие, как показано в предыдущей ссылке для свойства Charges.

0 голосов
/ 18 декабря 2010

Вам необходимо выполнить действие «добавить элемент», чтобы запустить событие PropertyChanged интерфейса INotifyChanged, как описано здесь: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

Если нет, то WPF никогда не узнает, когда значение изменяется, так как привязка не производитсяв ObservableCollection, но к другому свойству, которое вместо этого обращается к нему.

Надеюсь, это поможет.

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