如何使用 MVVM 模式在 WPF 数据网格中绑定 CurrentCell [英] How to Bind CurrentCell in WPF datagrid using MVVM pattern

查看:25
本文介绍了如何使用 MVVM 模式在 WPF 数据网格中绑定 CurrentCell的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在学习 WPF MVVM 模式.我被困在 datagridBinding CurrentCell 中.基本上我需要当前单元格的行索引和列索引.

I'm learning WPF MVVM pattern. I'm stuck in Binding CurrentCell of datagrid. Basically I need the row index and column index of current cell.

<DataGrid AutoGenerateColumns="True" 
          SelectionUnit="Cell" 
          CanUserDeleteRows="True" 
          ItemsSource="{Binding Results}" 
          CurrentCell="{Binding CellInfo}" 
          Height="282" 
          HorizontalAlignment="Left" 
          Margin="12,88,0,0" 
          Name="dataGrid1" 
          VerticalAlignment="Top" 
          Width="558" 
          SelectionMode="Single">

这是我的视图模型

private User procedureName = new User();

public  DataGridCell   CellInfo
{
    get { return procedureName.CellInfo; }
    //set
    //{
    //    procedureName.CellInfo = value;
    //    OnPropertyChanged("CellInfo");
    //}
}

这是我的模型

private DataGridCell cellInfo;

public DataGridCell CellInfo
{
    get { return cellInfo; }
    //set
    //{
    //    cellInfo = value;
    //    OnPropertyChanged("CellInfo");
    //}
}

在我的 ViewModel 中,CellInfo 总是 null.我无法从 datagrid 中的 currentcell 获取值.请让我知道在 ViewModel 中获取CurrentCell 的方法.

And in my ViewModel CellInfo is always null. I am not able to get the value from the currentcell in datagrid. Please let me know a way to getCurrentCell in the ViewModel.

if (CellInfo != null)
{
    MessageBox.Show("Value is" + CellInfo.Column.DisplayIndex.ToString());
}

推荐答案

在快速浏览之后,我注意到一个非常简单的解决方案.

After having a quick poke-around I've noticed a very simple solution to your problem.

首先,这里有两个问题,而不是一个.您不能绑定 DataGridCell 类型的 CellInfo,它必须是 DataGridCellInfo,因为 xaml 无法自行转换.

First of all there's two problems rather then one here. You cannot bind a CellInfo of a type DataGridCell, it needs to be DataGridCellInfo as xaml cannot convert it on its own.

其次,在您的 xaml 中,您需要将 Mode=OneWayToSourceMode=TwoWay 添加到您的 CellInfo 绑定.

Secondly in your xaml you will need to add Mode=OneWayToSource or Mode=TwoWay to your CellInfo binding.

这是一个与您的原始代码半相关的粗略示例

Here is a rough example semi-related to your original code

XAML

<DataGrid AutoGenerateColumns="True"
          SelectionUnit="Cell"
          SelectionMode="Single"
          Height="250" Width="525" 
          ItemsSource="{Binding Results}"
          CurrentCell="{Binding CellInfo, Mode=OneWayToSource}"/>

虚拟机

private DataGridCellInfo _cellInfo;
public DataGridCellInfo CellInfo
{
    get { return _cellInfo; }
    set
    {
        _cellInfo = value;
        OnPropertyChanged("CellInfo");
        MessageBox.Show(string.Format("Column: {0}",
                        _cellInfo.Column.DisplayIndex != null ? _cellInfo.Column.DisplayIndex.ToString() : "Index out of range!"));
    }
}

只是一个小技巧 - 如果您调试应用程序并查看输出"窗口,它实际上会告诉您绑定是否存在任何问题.

Just a small tip - if you debug your app and look at the Output window it actually tells you if there is any troubles with your bindings.

希望这有帮助!

K.

这篇关于如何使用 MVVM 模式在 WPF 数据网格中绑定 CurrentCell的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆