我对 wpf 和 MVVM 还是有点陌生。我正在尝试在不破坏该模式的情况下编写解决方案。我有两个(嗯,三个,但对于这个问题的范围只有两个)DataGrid
。我想双击一个行,然后从该行加载数据到第二个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>
我在想这段代码应该放在 MainWindowViewModel 中。所以我试图创建一个命令:
public ICommand DoubleClickPopRow { get { return new DelegateCommand(OnDoubleClickPopRow); }}
和相同的事件处理程序:
private void OnDoubleClickPopRow(object sender, MouseButtonEventArgs e) {
}
但是ICommand
当它返回时抛出异常DelegateCommand(OnDoubleClickPopRow)
。
嗯,可以清楚地看到参数的数量不匹配。我知道我做错了什么,但我不太确定它是什么。我将继续研究这个,但你们可以提供的任何帮助将不胜感激。