Нужна дополнительная помощь по связыванию нескольких CommandParameters с использованием MultiBinding - PullRequest
0 голосов
/ 30 января 2010

Мне нужен обработчик команды для ToggleButton, который может принимать несколько параметров, а именно свойство IsChecked указанного ToggleButton, наряду с постоянным значением, которое может быть строкой, байтом, int ... не имеет значения.

Я нашел этот замечательный вопрос на SO , перешел по ссылке на ответ и прочитал о MultiBinding и IMultiValueConverter. Все шло очень гладко, пока мне не пришлось писать MultiBinding, когда я понял, что мне также нужно передать постоянное значение, и я не смог сделать что-то вроде

<Binding Value="1" />

Затем я столкнулся с другим подобным вопросом, на который Кент Бугаарт ответил , и затем я начал думать о том, как мне обойти это.

Один из возможных способов - не использовать MVVM и просто добавить свойство Tag в мой ToggleButton, и в этом случае мой MultiBinding будет выглядеть так:

<MultiBinding Converter="{StaticResource MyConverter}">
    <MultiBinding.Bindings>
        <Binding Path="IsChecked" />
        <Binding Path="Tag" />
    </MultiBinding.Bindings>
</MultiBinding>

Кент прокомментировал: «Если вы используете MVVM, вы должны обойти эту проблему». Тем не менее, я не уверен, что это вариант для меня, хотя я принял MVVM в качестве своего шаблона WPF необходимость выбор.

Причина, по которой я говорю это, заключается в том, что у меня есть несколько ToggleButton в UserControl, и каждая из команд ToggleButtons должна вызывать одну и ту же функцию. Но так как они являются ToggleButtons, я не могу использовать свойство, привязанное к IsChecked во ViewModel, потому что я не знаю, какое из них было нажано в последний раз. Я полагаю, я мог бы добавить еще одну частную собственность, чтобы отслеживать это, но это выглядит немного глупо. Что касается константы, я, вероятно, мог бы избавиться от этого, если бы придумал идею отслеживания, но не был уверен в каком-либо другом способе ее обойти.

У кого-нибудь есть хорошие предложения для меня здесь? :)

РЕДАКТИРОВАТЬ - хорошо, поэтому мне нужно обновить мои привязки, которые все еще не работают правильно:

    <ToggleButton Tag="1" Command="{Binding MyCommand}" Style="{StaticResource PassFailToggleButtonStyle}" HorizontalContentAlignment="Center" Background="Transparent" BorderBrush="Transparent" BorderThickness="0">
        <ToggleButton.CommandParameter>
            <MultiBinding Converter="{StaticResource MyConverter}">
                <MultiBinding.Bindings>
                    <Binding Path="IsChecked" RelativeSource="{RelativeSource Mode=Self}" />
                    <Binding Path="Tag" RelativeSource="{RelativeSource Mode=Self}" />
                </MultiBinding.Bindings>
            </MultiBinding>
        </ToggleButton.CommandParameter>
    </ToggleButton>

IsChecked работал, но не Tag. Я только что понял, что Tag - это строка. Теперь это работает! Ключ должен был использовать RelativeSource Self .

1 Ответ

0 голосов
/ 26 мая 2010

Как объяснено выше, я понял это. Я должен был использовать Self для RelativeSource, и это помогло.

...