繁体   English   中英

twoWay 绑定在以 ObservableCollection 作为源的 ToggleButton 中不起作用

[英]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绑定存在问题。 我已经尝试像在我的示例中一样添加UpdateSourceTriggerhere

有任何想法吗?

正如@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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM