mHe*_*pMe 1 c# wpf xaml datagrid mvvm
我有一个包含数据网格的WPF应用程序.它绑定到我的List对象"Orders",如下所示.
public class OrderBlock
{
public Settings setting;
public List<Order> orders;
}
public class Order
{
public int Amount;
public string OrderID;
public string OrderIDDup;
public string Name;
public string NameDup;
public bool DupIDs;
// and some string, int fields
}
Run Code Online (Sandbox Code Playgroud)
由于我无法控制的原因,可能存在多个OrderID,因此可能是OrderIDDup属性.默认情况下,我的datagrid只显示OrderID而不显示OrderIDDup.
我想要做的是让用户能够单击单元格ID并加载另一个窗口以向他们显示另一个ID以及两个名称,并让他们选择应该使用哪个ID.
我一直在读,WPF DataGrid不支持双击单元格的功能.所以我有点迷失,因为我应该如何开始解决这个问题.我能看到的另一个问题是,当我尝试(作为操作词)使用MVVM设计时,这种事件将如何暴露给我的视图模型?
这也是展示此类信息的最佳方式.
任何帮助都会很棒,谢谢,M
bob*_*h75 23
您可以双击网格,而不是双击单元格
<DataGrid.InputBindings>
<MouseBinding Gesture="LeftDoubleClick"
Command="{Binding Edit}"
CommandParameter="{Binding ElementName=UsersDataGrid, Path=SelectedItem}" />
</DataGrid.InputBindings>
Run Code Online (Sandbox Code Playgroud)
在ViewModel中
public ICommand Edit { get; private set; }
Edit = new RelayCommand(EditUser, x => _isAdmin);
private static void EditUser(object usr)
{
if (!(usr is User))
return;
new UserEditorViewModel(usr as User);
}
Run Code Online (Sandbox Code Playgroud)
小智 6
我们可以通过两种方式做到这一点,
a) 通过使用依赖属性 b) 通过添加 System.Windows.Interactivity.dll。
通常我更喜欢第二种方式。
步骤 1:在视图模型类文件中实现 ICommand 接口。
第 2 步:定义您的命令,
public ICommand DoubleClickCommand
{
//Do your code
}
Run Code Online (Sandbox Code Playgroud)
第2步:将上述.dll添加到相应解决方案的xaml文件中。
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
Run Code Online (Sandbox Code Playgroud)
步骤3:在Datagrid标签内,使用以下代码来实现InvokeCommandAction类
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseDoubleClick">
<i:InvokeCommandAction Command="{Binding DoubleClickCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
就是这样。希望对你有帮助:)