双击行WPF后填充第二个数据网格

双击行WPF后填充第二个数据网格,wpf,events,datagrid,wpfdatagrid,delegatecommand,Wpf,Events,Datagrid,Wpfdatagrid,Delegatecommand,我对wpf和MVVM还是有点陌生。我试图在不破坏这种模式的情况下编写一个解决方案。我有两个(三个,但对于这个问题的范围只有两个)DataGrids。我想双击其中一行,然后从中将数据加载到第二个DataGrid(理想情况下,我会启动第二个线程来加载数据)。到目前为止,我可以得到一个窗口弹出当我双击一行。我将事件的代码放入xaml的代码中。对我来说,这似乎很有意思。不知怎么的,我觉得这打破了这个模式 private void DataGrid_MouseDoubleClick(object send

我对wpf和MVVM还是有点陌生。我试图在不破坏这种模式的情况下编写一个解决方案。我有两个(三个,但对于这个问题的范围只有两个)
DataGrid
s。我想双击其中一行,然后从中将数据加载到第二个
DataGrid
(理想情况下,我会启动第二个线程来加载数据)。到目前为止,我可以得到一个窗口弹出当我双击一行。我将事件的代码放入xaml的代码中。对我来说,这似乎很有意思。不知怎么的,我觉得这打破了这个模式

private void DataGrid_MouseDoubleClick(object sender, System.Windows.Input.MouseButtonEventArgs e) {
    if (popDataGrid.SelectedItem == null) {
        return;
    }
    var selectedPopulation = popDataGrid.SelectedItem as PopulationModel;
    MessageBox.Show(string.Format("The Population you double clicked on has this ID - {0}, Name - {1}, and Description {2}", selectedPopulation.populationID, selectedPopulation.PopName, selectedPopulation.description));
}
这是代码隐藏中事件的代码,下面是xaml中的网格定义:

<DataGrid ItemsSource="{Binding PopulationCollection}" Name="popDataGrid"
          AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected"
          CanUserAddRows="False" Margin="296,120,0,587" HorizontalAlignment="Left" Width="503" Grid.Column="1" 
          MouseDoubleClick="DataGrid_MouseDoubleClick">
</DataGrid>
和相同的事件处理程序:

private void OnDoubleClickPopRow(object sender, MouseButtonEventArgs e) {
}
但是
ICommand
在返回
DelegateCommand(OnDoubleClickPopRow)
时引发异常


我们可以清楚地看到,参数的数量不匹配。我知道我做错了什么,但我不太确定是什么。我将继续对此进行研究,但非常感谢你们提供的任何帮助。

我将在哪里添加此代码?我尝试将其添加到DataGridTextColumns行之前的列中。那名字空间呢?我得到一个异常,告诉我它找不到它?我需要下载一个dll吗?我仍然不知道如何实现它。你能推荐一些阅读材料吗?下载免费的SDK我加载了错误的dll。。。但我仍然不明白如何捕捉事件本身,比如说显示一个包含消息的窗口,以及该数据元素行中的所有项?因此,您的命令将发送到视图模型中的中继命令。从视图模型中,还可以将选定项绑定到网格。因此,当双击发生时,在视图模型中,您将知道双击了哪些项,并且可以从中打开一个新窗口,并为该新窗口设置数据上下文。
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<DataGrid ItemsSource="{Binding PopulationCollection}" Name="popDataGrid"
AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected"
CanUserAddRows="False" Margin="296,120,0,587" HorizontalAlignment="Left" Width="503"  Grid.Column="1" SelectedItem="{Binding ItemInViewModel}"></DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Save_Bid}" />
</i:EventTrigger>
</i:Interaction.Triggers>
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
<DataGrid ItemsSource="{Binding PopulationCollection}" Name="popDataGrid"
AutoGenerateColumns="False" RowDetailsVisibilityMode="VisibleWhenSelected"
CanUserAddRows="False" Margin="296,120,0,587" HorizontalAlignment="Left" Width="503"  Grid.Column="1" SelectedItem="{Binding ItemInViewModel}"></DataGrid>
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding Save_Bid}" />
</i:EventTrigger>
</i:Interaction.Triggers>
bool Can_Fire_Event()
{
if(ItemInViewModel != null)
{ return true; } else { return false; }
}
private RelayCommand _saveBid;
public ICommand SaveBid
{
get
{
if (_saveBid == null)
{
_saveBid = new RelayCommand(param => Save_Bid(), param => Can_Fire_Event());
}
return _saveBid;
}
}

public void Save_Bid()
{
//Open your new Window here, using your "ItemInViewModel" because this event couldn't be fired from your datagrid unless the "ItemInViewModel" had a value assigned to it

}