[英]TwoWay Binding ObservableCollection to DataGrid in WPF not working
[英]twoWay binding is not working in ToggleButton with ObservableCollection as the source
我成功地将两个ToggleButton
绑定到ObservableCollection<VMData>
,按钮的IsChecked
state 是我遇到问题的地方:
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}"/>
在视图模型中:
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
.Running 从 state 的false
成功更新为true
。 但是,当我通过视图模型中的一个简单方法将VMDataInfoSet[0].Running
设置为false
(选中ToggleButton
时,又名true
)时, ToggleButton
保持“蓝色”并且不会更新回未选中的 state。 所以我可以通过按钮更新ObservableCollection
,但我不能通过ObservableCollection
/code 更新按钮。
SO上有很多类似的问题,特别是对于WPF。 虽然我还不能弄清楚这一点。 此处的切换按钮的OneWay
绑定存在问题。 我已经尝试像在我的示例中一样添加UpdateSourceTrigger
, here 。
有任何想法吗?
正如@JohnnyQ 在评论中提到的,在 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));
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.