【问题标题】:How to change ToggleButton from ViewModel?如何从 ViewModel 更改 ToggleButton?
【发布时间】:2011-11-05 06:29:56
【问题描述】:

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

总结:我无法从 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();
}

这怎么可能?如何以编程方式更改切换状态?

非常感谢,

【问题讨论】:

  • 你试过不使用 Nullable 属性吗?
  • 谢谢,现在可以了。 :) 请把它放在那里作为回复,我将其标记为已回答。

标签: c# .net wpf silverlight togglebutton


【解决方案1】:

对我来说这是一个Nullable 属性问题,telerik 控件由于某种原因不支持。如果是这样,请在提供商的网站上查看可用的解决方案/服务包,或者简单地将您的属性 NON Nullable 并重构您的代码。

问候。

【讨论】:

    【解决方案2】:

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

    我发现的解决方法是使用双向绑定,但通过使用 UpdateSourceTrigger=Explicit 来防止绑定更新源

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

    这对我有用。

    它被描述为 WPF here 中的一个已知问题

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-21
      • 2022-01-03
      • 1970-01-01
      • 1970-01-01
      • 2021-02-09
      • 1970-01-01
      • 2011-03-04
      • 2018-06-03
      相关资源
      最近更新 更多