gpt4 book ai didi

c# - 绑定(bind)复选框状态不会触发 OnPropertyChanged

转载 作者:行者123 更新时间:2023-12-03 10:58:48 24 4
gpt4 key购买 nike

我有一个像这样绑定(bind)的复选框列表。

<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>
绑定(bind)是单向的,因为我可以看到这些框从一开始就根据我的设置被选中/取消选中。我期待选中一个框来更新底层 View 模型,但它没有发生。 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));
}
}
我在这里能错过什么?
据我所知,我正在做 正是 as this guy suggests .显然我错过了一些东西,但它超出了我的范围......
编辑
根据@Clemens 的要求,我还在Something 类中实现了接口(interface)。
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));
}
}

最佳答案

类(class) Something必须执行 INotifyPropertyChanged界面。这意味着除了写

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

它还必须实际提高 PropertyChanged属性值更改时的事件,例如:
private string name;
public string Name
{
get { return name; }
set
{
name = value;
OnPropertyChanged();
}
}

关于c# - 绑定(bind)复选框状态不会触发 OnPropertyChanged,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27939444/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com