Как я могу использовать ToggleSwitch с MVVM Light в WP7? - PullRequest
4 голосов
/ 12 апреля 2011

Я пытаюсь использовать ToggleSwitch с MVVM Light в приложении Wp7.

В моем представлении:

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

ViewModel содержит:

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, который прекрасно работает с

<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 выглядит лучше (IMHO)

Любые предложения приветствуются.

1 Ответ

5 голосов
/ 13 апреля 2011

Я полагаю, что проблема с вашей разметкой может заключаться в том, что свойство IsChecked в ToggleButton может иметь три состояния;null, true или false. Вы связываете его с логическим значением, но, возможно, захотите попробовать сделать его System.Nullable<Boolean> (bool?), чтобы учесть три состояния.Я считаю, что это все еще необходимо, даже если вы установите IsThreeState = false;

...