[MVPF体系结构中的WPF Datagrid获取单元格值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[MVPF体系结构中的WPF Datagrid获取单元格值相关的知识,希望对你有一定的参考价值。

如何从Datagrid获取选定的单元格值?

[我看了什么信息?标题为“ WPF获取单元格值MVVM”的所有内容。

我做了什么? 1步:

    <Page x:Class="PDB.UsersView"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
      xmlns:local="clr-namespace:PDB"
      xmlns:PDB ="clr-namespace:PDBapi;assembly=PDBapi"
      mc:Ignorable="d" 
      d:DesignHeight="450" d:DesignWidth="800"
      Title="UsersView"
      >

    <Page.DataContext>
        <PDB:UsersViewModel/>
    </Page.DataContext>

    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <!--Page Header info content-->
        <Grid Grid.Row="0">
            <TextBlock Text="Binding ElementName=myGrd, Path=CurrentCell.Column.DisplayIndex"/>
        </Grid>
        <!--Datagrid content-->
        <DataGrid x:Name="myGrd" 
                  SelectionMode="Single"
                  SelectionUnit="Cell"
                  IsReadOnly="True"
                  Grid.Row="1" 
                  ItemsSource="Binding Users" 
                  AutoGenerateColumns="True"

                  CanUserAddRows="False">
            <DataGrid.InputBindings>
                <MouseBinding MouseAction="RightClick"
                  Command="Binding CellClickCommand"
                  CommandParameter="Binding ElementName=myGrd, Path=CurrentCell" />
            </DataGrid.InputBindings>

        </DataGrid>
    </Grid>
</Page>

VM:

        public  UsersViewModel()
        
            UserList = new ObservableCollection<User>();

            GetUsers();

            Users = CollectionViewSource.GetDefaultView(UserList);

            CellClickCommand = new RelayParamCommand((data) => GetValue(data));
        

        public void GetUsers()
        
            User user = new User();

            // Users = await user.GetUsers();
            UserList.Add(new User
            
                Name = "Marius",
                Departament = "some",
                Tabelis = 5
            );

            UserList.Add(
            new User
            
                Name = "Darius",
                Departament = "unknown",
                Tabelis = 20
            );
        

        private void GetValue(object data)
        

            var some = (DataGridCellInfo)data;

            //Returns only number
            Console.WriteLine(some.Column?.DisplayIndex.ToString());
        
    

但是使用这种方法,我面临两个问题:在xaml页面中,我添加了textblock来测试将哪些文本绑定到datagrid currentCell。当我单击鼠标右键时,它将正确显示int值。但是在我的GetValue(对象数据)函数控制台中,第一次单击鼠标右键返回null,从第二次返回int值,但是控制台中的值始终与textblock值不同,我必须在同一单元格上单击两次以获取正确的单元格位置。那是完全错误的。如何解决?

另一个问题:如何从我绑定的currentCell中获得实际价值?

我做了什么? 2步:

在xaml中,我将datagrid currentCell绑定到VM属性CurrentCell="Binding Cell"我知道可以,但是仍然只返回DataGridCellInfo对象。我试图将其投射到Users对象和各种对象,但是我无法获得单元的价值。有人可以提供良好的做法来从Datagrid获取单元值吗?

答案

数据网格绑定到一组用户,因此每个用户由一行而不是一个单元格表示。这就是CurrentCell返回DataGridCellInfo

的原因

如果需要用户,请绑定到CurrentItem

在XAML中:

<DataGrid 
    ItemsSource="Binding Users"
    CurrentItem="Binding SelectedUser"... 

在视图模型中:

private user selectedUser;
public user SelectedUser

    get => selectedUser;
    set
    
        var u = value as user;
        selectedUser = u;
    
 

以上是关于[MVPF体系结构中的WPF Datagrid获取单元格值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 WPF C# 中的 DataGrid 的 TextBoxes 中获取选定的行值

wpf DataGrid 如何获取DataGridTemplateColumn.CellTemplate 中的TextBox的Text值

如何使用从wpf中的数据库中获取的值更改datagrid行背景颜色

WPF 获取DataGrid 控件选中的单元格信息

如何获取 WPF DataGrid 的单元格级别组合框?

在wpf中怎么获取datagrid某行某列的值