Как реализовать Multistate CheckBox в WPF для MVVM - PullRequest
2 голосов
/ 10 июня 2011

У меня есть требование, для которого мне нужны MultiState флажки в WPF ...

Кроме того, поскольку я использую MVVM, обработка привязки и команд должна следовать так же, как я буду использовать в своих представлениях.

Я видел флажок Multistate в DotnetNuke (сделанный в ASP.NET), но как сделать это в WPF

некоторые материалы в этом отношении будут полезны

Некоторые примеры будут великолепны ...

Ответы [ 2 ]

2 голосов
/ 10 июня 2011

Флажки имеют определенные функциональные возможности (отмечены, не отмечены и, при необходимости, не определены).

Исходя из вашего комментария, я думаю, что будет проще всего сделать это как кнопку.Сейчас у меня нет времени, чтобы протестировать реальный пример, но вот какой-то псевдокод, который поможет вам:

XAML

<Button Command="{Binding ToggleDecisionState}">
    <Button.Content>
        <Image Source="{Binding CurrentDecisionIcon}" />
    <Button.Content>
</Button>

ViewModel (опуская детали реализации MVVM)

enum Decisions
{
    Agree,
    Disagree,
    Maybe,
    DoNotKnow
};

public Decisions CurrentDecision
{
    get {}
    set {}
}

public RelayCommand ToggleDecisionStateCommand
{
       // In here, call code to execute toggle
       if (mCurrentDecision == Decisions.DoNotKnow)
           CurrentDecision = Decisions.Agree;
       else
           CurrentDecision += 1;       
}

public ImageSource CurrentDecisionIcon
{
    get
    {
        ImageSource img = [some default image];
        switch (mCurrentDecision)
        {
            case Decisions.Agree:
                img = [path to Agree icon];
                break;

            // Other cases here
        }

        return img;
    }
}
1 голос
/ 10 июня 2011

Если вы хотите использовать флажок с 3 состояниями, вы должны изменить заданное логическое значение (во ViewModel) на bool?тип.

  public bool? IsEnabled { get; set; }

и установите это свойство для CheckBox

  IsThreeState = True;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...