が理由だけではなく、昔ながらのEventHandlerを使用していないしなければならないと思いますMVVMLightとデータグリッド(ただし、項目)でこの
</DataGrid.Columns>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick" >
<command:EventToCommand Command="{Binding Path=OpenEquipementCommand}" PassEventArgsToCommand="True"/>
</i:EventTrigger>
<i:EventTrigger EventName="SelectionChanged">
<command:EventToCommand Command="{Binding Path=SelectionChangedCommand}" PassEventArgsToCommand="True" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
のようにそれを行いますか? WPFのサポートが結合という理由だけで
public partial class MainWindow : Window
{
MainWindowViewModel ViewModel => (MainWindowViewModel) DataContext;
private void TreeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
var element = (FrameworkElement)sender;
var item = element.DataContext;
ViewModel.SelectionChangedCommand.Invoke(item);
//alternativelly:
ViewModel.SelectedItem = TreeView1.SelectedItem;
}
}
<TreeView x:Name="TreeView1" SelectedItemChanged="TreeView_SelectedItemChanged" />
、それはあなたが、それは非常に複雑だ場合でも、どこでもそれを使用する必要が意味するものではありません。私が書いたコードは、MVVMの違反ではありません。
あなたが背後にあるコードを避けるために正当な理由がある場合は、添付プロパティとして実装カスタム動作でのこのイベントハンドラを実装することができるので、それは次のようになります。
<TreeView local:TreeViewBehavior.SelectionChangedCommand="{Binding SelectionChangedCommand}" />
は確かですあなたたいが添付イベントとは 'SelectedItemChanged'ではなく 'Seleted'ですか? –
typo Seleted ==> Selected;これはプロパティです – GCamel
@Mighty Badaboomうん、SelectedItemChangedはバインドできますが、選択したアイテムデータが必要なものになりません。 –