0

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

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

<Binding Value="1" /> 

Затем я наткнулся на другой similar question that Kent Boogaart answered, а затем я начал подумайте о том, как я могу обойти это.

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

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

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

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

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

EDIT - нормально, так что мне нужно, чтобы обновить свои привязок, которые до сих пор не работают совсем верно:

<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 работал, но не тег. Я просто понял, что тег - это строка ... duh. Теперь работает! Ключ должен был использовать RelativeSource Self.

+0

Неправильное связывание, так как оно запрашивает VM. У кого-нибудь есть подсказки, или вы можете рекомендовать хороший онлайн-лист «чит-листа» для выяснения путей привязки данных? Обычно я смотрю окно вывода на наличие ошибок, чтобы увидеть, к чему он привязан. Прямо сейчас, я думаю, что я должен установить атрибут RelativeSource, но никогда раньше не использовал его. – Dave

+0

ok, я нашел это: http://stackoverflow.com/questions/84278/how-do-i-use-wpf-bindings-with-relativesource – Dave

+0

Возможный трюк для привязки к константе: используйте ресурс. ' 1' в разделе «Ресурсы», затем '{Binding Source =" {StaticResource One} "}'. Полностью непроверенный. – itowlson

ответ

0

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

 Смежные вопросы

  • Нет связанных вопросов^_^