如何从ViewModel更改ToggleButton?

时间:2011-08-27 22:07:19

标签: c# .net wpf silverlight togglebutton

我遇到了一个有趣的问题。

摘要:我无法从ViewModel更改切换按钮的状态。 Microsoft ToggleButton以及Telerik Controls也存在同样的问题。

视图模型:

private bool? _isToggleChecked;
public bool? IsToggleChecked
{
    get { return _isToggleChecked; }
    set
    {
        if(_isToggleChecked == value)
            return;
        _isToggleChecked = value;
        RaisePropertyChanged(()=>IsToggleChecked);
    }
}

public VM()
{
    FireCommand = new DelegateCommand(OnFire);
}

private void OnFire()
{
    if (IsToggleChecked == null)
    {
        IsToggleChecked = true;
        return;
    }

    IsToggleChecked = !IsToggleChecked;
}

public DelegateCommand FireCommand { get; set; }

查看:(可以使用Microsoft ToggleButton,但行为相同)

<Grid x:Name="LayoutRoot" Background="White">
    <StackPanel>
        <telerik:RadToggleButton Height="50" IsChecked="{Binding IsToggleChecked}" />
        <Button Command="{Binding FireCommand}" Height="20" />
    </StackPanel>        
</Grid>

查看代码背后:

public MainPage()
{
    InitializeComponent();
    DataContext = new VM();
}

这怎么可能?如何更改切换状态programmaticaly?

非常感谢,

2 个答案:

答案 0 :(得分:2)

当我将按钮绑定到命令时,我在RadRibbonToggleButton上绑定IsChecked时出现问题。

我找到的解决方法是使用双向绑定,但使用UpdateSourceTrigger = Explicit阻止绑定更新源

IsChecked="{Binding IsLocked, Mode=TwoWay, UpdateSourceTrigger=Explicit}"

这适合我。

它被描述为WPF here

中的已知问题

答案 1 :(得分:1)

对我而言,这是一个Nullable属性问题, telerik 控件由于某种原因不支持。如果是这样,请查看提供商的网站以获取可用的解决方案/服务包,或者只需将您的属性设置为 NON Nullable并重构您的代码。

问候。