twoWay 绑定在以 ObservableCollection 作为源的 ToggleButton 中不起作用
Posted
技术标签:
【中文标题】twoWay 绑定在以 ObservableCollection 作为源的 ToggleButton 中不起作用【英文标题】:twoWay binding is not working in ToggleButton with ObservableCollection as the source 【发布时间】:2021-05-08 15:32:00 【问题描述】:我成功地将两个ToggleButton
绑定到一个ObservableCollection<VMData>
,按钮的IsChecked
状态是我遇到问题的地方:
XAML:
<ToggleButton Content="One" x:Name="ToggleButtonOne" Margin="10,20,0,0" Width="100"
Command="Binding ToggleButtonClicked_Command"
CommandParameter="Binding ElementName=ToggleButtonOne"
IsChecked="Binding VMDataInfoSet[0].Running, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay"/>
<ToggleButton Content="Two" x:Name="ToggleButtonTwo" Margin="10,10,0,0" Width="100"
Command="Binding ToggleButtonClicked_Command"
CommandParameter="Binding ElementName=ToggleButtonTwo"
IsChecked="Binding VMDataInfoSet[1].Running, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay"/>
在 ViewModel 中:
public ObservableCollection<VMData> VMDataInfoSet get; set;
public class VMData
public string MyType get; set;
public string ID get; set;
public double Qty get; set;
public string Action get; set;
public bool Running get; set;
单击ToggleButton
时,VMDataInfoSet[0].Running
成功从false
状态更新为true
。然而,当我通过视图模型中的一个简单方法将VMDataInfoSet[0].Running
设置为false
(当ToggleButton
被选中时,又名true
)时,ToggleButton
仍然是“蓝色”并且不会更新回未选中状态状态。所以我可以通过按钮更新ObservableCollection
,但我不能通过ObservableCollection
/code 更新按钮。
关于 SO 有很多类似的问题,尤其是对于 WPF。虽然我还不能弄清楚这一点。切换按钮here 的OneWay
绑定存在问题。我已经尝试添加UpdateSourceTrigger
,如我的示例here。
有什么想法吗?
【问题讨论】:
您需要在您的 VMData 类上实现接口 INotifyPropertyChanged。 【参考方案1】:正如@JohnnyQ 在 cmets 中提到的,在 VMDataClass 中实现 INPC 接口:
public class VMData : INotifyPropertyChanged
private string myType;
private string iD;
etc
public string MyType
get return myType;
set
myType = value;
RaisePropertyChanged("MyType");
public string ID
iD = value;
RaisePropertyChanged("ID");
etc
public event PropertyChangedEventHandler PropertyChanged;
protected void RaisePropertyChanged(string name)
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(name));
【讨论】:
以上是关于twoWay 绑定在以 ObservableCollection 作为源的 ToggleButton 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章
InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作
InvalidOperationException - TwoWay 或 OneWayToSource 绑定无法在只读属性上工作