2011-04-12 40 views
4

我想在Wp7應用程序中使用ToggleSwitch和MVVM Light。WP7中如何在MVVM Light中使用ToggleSwitch?

在視圖中我有:

<toolkit:ToggleSwitch x:Name="toggleAccuracy" 
    Content="{Binding AccuracyText, Mode=TwoWay}" 
    IsChecked="{Binding AccuracyHigh, Mode=TwoWay}" 
    IsEnabled="True" 
    Header="Accuracy" 
    Margin="8,0" 
    Height="140" 
    VerticalAlignment="Top" > 

視圖模型包含:

private bool _AccuracyHigh = true; 
public bool AccuracyHigh 
{ 
    get 
    { 
     return _AccuracyHigh; 
    } 
    set 
    { 
     _AccuracyHigh = value; 
    } 
} 

private string _AccuracyText = "High"; 
public string AccuracyText 
{ 
    get 
    { 
     return _AccuracyText; 
    } 
    set 
    { 
     _AccuracyText = value; 
    } 
} 

AccuracyText和AccuracyHigh火災得到適當的值。

我的困難是試圖捕捉「狀態改變」事件;選中並取消選中。如果我將它們綁定爲如下形式: Checked =「{Binding Path = AccuracyChanged}」 我得到一個運行時錯誤,告訴我標記是錯誤的。

我還沒有成功嘗試了觸發:

<i:Interaction.Triggers> 
     <i:EventTrigger EventName="Checked"> 
      <GalaSoft_MvvmLight_Command:EventToCommand Command="{Binding AccuracyChanged}"/> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
</toolkit:ToggleSwitch> 

我可以用單選按鈕,其工作的很好

<RadioButton Content="Up" 
      x:Name="radioButton1" 
      GroupName="UpDown" 
      Width="119" /> 
<RadioButton IsChecked="{Binding UpDown, Mode=TwoWay}" 
      Content="Down" 
      x:Name="radioButton2" 
      GroupName="UpDown" /> 

public bool UpDown 
{ 
    get 
    { 
     bool ud = settings.UpDown.ToLower() == "u" ? true : false; 
     return ud; 
    } 
    set 
    { 
     settings.UpDown = value == true ? "U" : "D"; 
     settings.Save(); 
    } 
} 

但ToggleSwitch看起來更好(恕我直言)

知道的任何建議。

回答

5

我相信你的標記問題可能是ToggleButton的IsChecked屬性可以是三種狀態; null,truefalse。您將它綁定到布爾值,但可能想要嘗試將其設置爲System.Nullable<Boolean>bool?)以允許三種狀態。即使您設置了IsThreeState = false,我相信這仍然是必需的;

+0

謝謝,解決了標記錯誤。 – Declan 2011-04-13 08:45:28

相關問題