如何在WP7中使用MVVM Light和ToggleSwitch?

4
我正在尝试在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;
    }
}

准确性文本和准确性高火获取适当的值。
我的困难在于尝试捕获“状态已更改”的事件; 已选中和未选中。如果我将它们绑定到类似以下内容的内容: 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,它与...很好地配合使用。
<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看起来更好。欢迎任何建议。
1个回答

5
我认为您的标记问题可能在于ToggleButton的IsChecked属性可以有三种状态:nulltruefalse。您将其绑定到布尔值上,但可能希望尝试将其设置为System.Nullable<Boolean>bool?),以允许三种状态。即使您设置了IsThreeState = false,我认为这仍然是必要的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接