У меня та же команда, которую я хочу использовать для двух элементов управления в окне типа диалога. В качестве потенциально интересного фона я использую идеи Джоша Смита ViewModel / RelayCommand, поскольку я новичок в WPF, и это первое, что я увидел, что я действительно могу понять с точки зрения общей картины.
Таким образом, команда является свойством ViewModel, и с помощью встроенной поддержки Button легко связать ее с командой в XAML:
<Button ... Command="{Binding Path=PickCommand}" Content="_Ok"></Button>
Теперь в ListView единственный способ использовать ту же команду, подключенную для двойного щелчка, - это обработчик события:
<ListView ...
ItemsSource="{Binding Path=AvailableProjects}"
SelectedItem="{Binding Path=SelectedProject, Mode=TwoWay}"
MouseDoubleClick="OnProjectListingMouseDoubleClick"
>
private void OnProjectListingMouseDoubleClick(object sender, MouseButtonEventArgs e) {
var vm = (ProjectSelectionViewModel) DataContext;
vm.Pick(); // execute the pick command
}
Есть ли способ сделать это, привязав способ, которым кнопка делает это?
Приветствия
Berryl
<------- реализация - есть ли лучший способ? --->
Ваш класс SelctionBehavior был на высоте, но я был озадачен вашим кодом xaml. Установив «Стиль» в listViewItem, я получил дочерние элементы DataContext, где живет команда, которую я хочу выполнить. Поэтому я прикрепил поведение к самому ListView:
<ListView ...Style="{StaticResource _attachedPickCommand}" >
И поместить стиль в словарь ресурсов:
<Style x:Key="_attachedPickCommand" TargetType="ListView">
<Setter Property="behaviors:SelectionBehavior.DoubleClickCommand" Value="{Binding Path=PickCommand}" />
</Style>
Это работает! Но он чувствует себя неловко, устанавливая свойство стиля представления списка. Это просто потому, что мне не нравится стиль как нечто большее, чем что-то визуальное в wpf, или есть лучший способ сделать это?
Ура и спасибо!
Berryl