簡體   English   中英

綁定復選框狀態不會觸發OnPropertyChanged

[英]Bound checkbox state doesn't fire OnPropertyChanged

我有一個這樣綁定的復選框列表。

<ListBox ItemsSource="{Binding AllThings}">
  <ListBox.ItemTemplate>
    <DataTemplate>
      <CheckBox Content="{Binding Name}"
                IsChecked="{Binding Active,Mode=TwoWay}"
                Checked="ToggleButton_OnChecked"
                Unchecked="ToggleButton_OnUnchecked"/>
    </DataTemplate>
  </ListBox.ItemTemplate>
</ListBox>

綁定的工作方式是單向的,因為我可以從一開始就根據我的設置看到是否選中了這些框。 我期望選中一個框來更新基礎視圖模型,但不會發生。 OnPropertyChanged上設置的斷點不會被命中。 我懷疑它有與我改變所觀察到的財產財產的事實做,但由於無知我不知道。

class Presenter : INotifyPropertyChanged
{
  private IEnumerable<Something> _allThings;
  public IEnumerable<Something> AllThings
  {
    get { return _allThings; }
    set
    {
      _allThings = value;
      OnPropertyChanged("AllThings");
    }
  }

  public Presenter()
  {
    _allThings = DataAccessor.GetThings();
  }

  public event PropertyChangedEventHandler PropertyChanged;

  [NotifyPropertyChangedInvocator]
  protected virtual void OnPropertyChanged(
    [CallerMemberName] String propertyName = null)
  {
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }
}

我在這里想念什么?

據我所見,我 按照這個人的建議做事。 顯然我錯過了一些東西,但超出我的范圍是……

編輯

根據@Clemens的請求,我還在Soomething類中實現了該接口。

public class Something :INotifyPropertyChanged
{
  public int Id { get; set; }
  public String Name { get; set; }
  public bool Active { get; set; }

  public override String ToString()
  {
    return Name;
  }

  public event PropertyChangedEventHandler PropertyChanged;

  [NotifyPropertyChangedInvocator]
  protected virtual void OnPropertyChanged(
    [CallerMemberName] string propertyName = null)
  {
    PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
  }
}

Something必須實現INotifyPropertyChanged接口。 這意味着除了寫作

public class Something : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;
}

當屬性值更改時,它還必須實際引發PropertyChanged事件,例如:

private string name;
public string Name
{
    get { return name; }
    set
    {
        name = value;
        OnPropertyChanged();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM