2011-08-27 51 views
3

我遇到了一个有趣的问题。如何从ViewModel更改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; } 

查看:(微软的切换按钮可以用来代替具有相同的行为)

<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?

非常感谢,

+1

你尝试不使用可为空的财产? – Tigran

+0

谢谢你,现在工作。 :)请把这个作为回应,并将其标记为已回答。 – Houman

回答

1

对我来说这是一个Nullable财产问题,即Telerik的控制不因某种原因支持。如果是这样,请检查提供商的网站上是否有可用的解决方案/服务包,或者直接让您的财产NONNullable并重构您的代码。

问候。

2

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

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

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

这对我的作品。

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

相关问题