2011-08-27 66 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

相關問題