[英]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.