C# 双击Datagridview行,使用MVVM归档该行的最佳方式是什么?

C# 双击Datagridview行,使用MVVM归档该行的最佳方式是什么?,c#,wpf,mvvm,C#,Wpf,Mvvm,我这里有一个非常基本的问题,我在互联网上搜索过,我找到了许多不同的答案,但我不知道哪一个更好。所以,我真正需要的是,当您单击一个数据网格行时,我想立即从我的许多不同视图模型转到另一个视图,问题是我知道我可以使用行为或事件触发器。对于我的问题,哪一个更好?如果我使用事件触发器,我可以从Blend designer程序轻松地连接它们吗?是否有任何有用的完整教程,以便我能够理解其中的差异以及如何归档我的目标?非常基本的事情不像代码隐藏和Win表单那么简单。我非常喜欢WPF和MVVM的这种新的结构风格,

我这里有一个非常基本的问题,我在互联网上搜索过,我找到了许多不同的答案,但我不知道哪一个更好。所以,我真正需要的是,当您单击一个数据网格行时,我想立即从我的许多不同视图模型转到另一个视图,问题是我知道我可以使用行为或事件触发器。对于我的问题,哪一个更好?如果我使用事件触发器,我可以从Blend designer程序轻松地连接它们吗?是否有任何有用的完整教程,以便我能够理解其中的差异以及如何归档我的目标?非常基本的事情不像代码隐藏和Win表单那么简单。我非常喜欢WPF和MVVM的这种新的结构风格,但是我有很多问题,我把这些问题叠加在非常基本的问题上,我不能专注于我的主要目标和程序中的逻辑问题

提前谢谢

//////////////////////////////////////更新1////////////////////////////////////////////////////////

首先非常感谢您的回复。我想对我一周后的新更新说声抱歉,但我很忙。我已经实现了我的目标,但我还没有完成。所以我再一次需要你的帮助。现在的问题是,在我与MouseDoubleClick进行了混合交互之后,现在我将继续我的数据网格视图模型,在那里我有了一个方法。我现在想更改应用程序的视图。我的意思是,当您双击数据网格行时,您将进入另一个选项卡项,并看到该选项卡项的内容。但请注意,我的应用程序是这样的:我有一个带有主窗口视图模型的主窗口,在此基础上我制作了5个不同的选项卡项,其中一个选项卡项上有数据网格,每个选项卡项都来自我的主窗口视图模型,并与一个内容控件连接。所以我想,如果我只能更改主窗口的选定索引,那会更好,因为每次导航时,你都可以看到它正在从0更改为1等。现在的大问题是,我正在使用一个中介,这样我就可以从数据网格视图模型中获取消息并将其发送到主窗口视图模型,我可以看到,它正在工作,所选索引正在从3变为2,正如我所希望的,但是调解人的“问题”是,当他完成工作后,会返回到我的数据网格视图模型,然后您会自动看到所选索引再次发生更改

以下是我的数据网格视图的一些代码,我是如何归档我的目标的:

<DataGrid DataContext = "{Binding }" SelectedItem = "{Binding SelectedRow}" ItemsSource="{Binding ObsEmployees}" CanUserAddRows="False" Width="Auto" AutoGenerateColumns="False" >

<i:Interaction.Triggeers>
<i:EventTrigger EventName="MouseDoubleClic">
<ei:CallMethodAction MethodName="DoubleCLickDataGrid" TargetObject="{Binding Source={StaticResource ViewModel}}" />
</i:EventTrigger>
</i:Interaction.Triggers>
这是我的主窗口视图模型的视图(Windows.Resources在顶部,这就是为什么我没有将它们写在ofc…)

有没有办法在没有中介的情况下更改主窗口ViewModel的SelectedIndex?因为Mediator返回到我的DataGrid视图模型,所以SelectedIndex再次从2更改为3


提前谢谢

我将始终在DataGrid上使用附加行为。这是如此常规,以至于我把它编码成了一个片段。因此,设置它的时间不到半分钟。请尝试使用MVVM库。MVVM是一种开箱即用的痛苦,即使使用Blend的交互性也是如此。我个人喜欢Caliburn.Micro。
public void DoubleClickAnzeigeTab(object sender, MouseButtonEventARgs e)
{
 Mediator.NotifyCollegues("DataGridDoubleClick", SelectedRow);
}
<TabControl SelectedIndex="{Binding SelectedIndex}" VerticalAlignment="Stretch" HorizontalAlighnment="Stretch" Padding="0" >

<TabItem Header="First TabItem">
<ContentControl Content="{StaticResource First_TabItem}" VerticalAlignment="Stretch" HorizontalAlighnment="Stretch"/>
</TabItem>


<TabItem Header="Second TabItem"> // The TabItem i want to Show when you click two times on the SelectedRow of my DataGrid //
<ContentControl Content="{StaticResource Second_TabItem}" VerticalAlignment="Stretch" HorizontalAlighnment="Stretch"/>
</TabItem>


<TabItem Header="Datagrid TabItem"> // The DataGrid....
<ContentControl Content="{StaticResource Third_TabItem}" VerticalAlignment="Stretch" HorizontalAlighnment="Stretch"/>
</TabItem>


<TabItem Header="Fourth TabItem">
<ContentControl Content="{StaticResource Fourth_TabItem}" VerticalAlignment="Stretch" HorizontalAlighnment="Stretch"/>
</TabItem>


<TabItem Header="Fifth TabItem">
<ContentControl Content="{StaticResource Fifth_TabItem}" VerticalAlignment="Stretch" HorizontalAlighnment="Stretch"/>
</TabItem>
private int _SelectedIndex;

public int SelectedIndex
{
get { return _SelectedIndex; }
set { _SelectedIndex = value;
OnPropertyChanged("SelectedIndex");
}

public MainWindowViewModel()
{
Mediator.Register("DataGridDoubleClick", DoAction)
}

public void DoAction(object param)
{
SelectedIndex = 1; // It does not matter what i write here, i want only my SelectedIndex to change...
}