我有一个可工作的MouseLeftButtonUp绑定(bind),可以从View.cs中工作,但无法从Viewmodel.cs中工作。
XAML:
<DataGrid x:Name="PersonDataGrid" AutoGenerateColumns="False"
SelectionMode="Single" SelectionUnit ="FullRow" ItemsSource="{Binding Person}"
SelectedItem="{Binding SelectedPerson}"
MouseLeftButtonUp="{Binding PersonDataGrid_CellClicked}" >
View.cs:
private void PersonDataGrid_CellClicked(object sender, MouseButtonEventArgs e)
{
if (SelectedPerson == null)
return;
this.NavigationService.Navigate(new PersonProfile(SelectedPerson));
}
从ViewModel.cs无法使用PersonDataGrid_CellClicked方法。我已经尝试阅读有关Blend System.Windows.Interactivity的内容,但是由于我在学习MVVM时想避免使用它,因此没有尝试过。
我尝试了DependencyProperty并尝试了RelativeSource绑定(bind),但是无法获取PersonDataGrid_CellClicked来导航到PersonProfile UserControl。
最佳答案
通过使用Blend System.Windows.Interactivity程序集,只要在VM中的已定义命令中未使用与 View 直接相关的逻辑,就不会违反任何MVVM原理,此处介绍如何将其与MouseLeftButtonUp事件一起使用:
<DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonUp" >
<i:InvokeCommandAction
Command="{Binding MouseLeftButtonUpCommand}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</DataGrid>
并在ViewModel中定义MouseLeftButtonUpCommand:
private RelayCommand _mouseLeftButtonUpCommand;
public RelayCommand MouseLeftButtonUpCommand
{
get
{
return _mouseLeftButtonUpCommand
?? (_mouseLeftButtonUpCommand = new RelayCommand(
() =>
{
// the handler goes here
}));
}
}
关于c# - 如何重写DataGrid MouseLeftButtonUp绑定(bind)到MVVM?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27586538/