如何在数据网格中添加项目(智能方式)

本文关键字:项目 智能 方式 添加 数据 数据网 网格 | 更新日期: 2023-09-27 17:57:05

实际上我读了很多解决方案,但太长了。没有办法制作这样的东西:

DataGrid.Items.Add("element");

如何在数据网格中添加项目(智能方式)

由于您使用的是 WPF,因此您需要创建一个列表,然后使用 dataGrid.ItemsSource = yourClassToShowList; .这将为您自动填充列和行项目。在事件SelectedItemChanged,您可以获取单个(或多个)选定的YouClassToShow。 WPF 使将数据绑定到 UI 控件变得非常简单。

以下是一些示例:

XAML

<DataGrid x:Name="dg" Margin="10,32,10,111" AlternatingRowBackground="White" SelectionChanged="dgDailyMediaReport_SelectionChanged" IsReadOnly="True" AutoGenerateColumns="False" SelectionMode="Single" >
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="{Binding Status}" Width="75">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Grid>
                        <ProgressBar  Height="20"  Grid.Row="0" Grid.Column="0" Minimum="0" Maximum="500" Value="{Binding TotalProgress, Mode=OneWay}"></ProgressBar>
                        <Label HorizontalAlignment="Center" Content="{Binding TotalPercent,Mode=OneWay}"></Label>
                    </Grid>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        <DataGridTextColumn Header="NAME" Binding="{Binding Name}" Foreground="DarkRed" />
        <DataGridTextColumn Header="AGE" Binding="{Binding Age}" />
    </DataGrid.Columns>
    <DataGrid.ContextMenu>
        <ContextMenu>
            <MenuItem x:Name="menuShowInFolder" Header="Show In Folder" Click="menuShowInFolder_Click"/>
        </ContextMenu>
    </DataGrid.ContextMenu>
</DataGrid>

C#

Window_Loaded事件:

List<YourClass> yourClassList = yourClassListRepo.GetYourClasses();
dg.ItemsSource = yourClassList;

dg_SelectionChanged事件:

if(dg.SelectedItems.Count > 0){
    foreach(YourClass yourClass in (List<YourClass> dg.SelectedItems)){
        MessageBox.Show(yourClass.Name);
    }
}

Binding="{Binding Name}"上下文中的"名称"是对象公共属性。

因此,您需要一种公共访问方法,例如public String Name {get;set}

旁注:要更改对象的属性值并使其自动显示,您需要对对象本身进行INotifyPropertyChanged

人员类:

public class Person: INotifyPropertyChanged
{
    #region PROPERTY_CHANGED_EVENTS
    public event PropertyChangedEventHandler PropertyChanged;
    protected virtual void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
    }
    protected bool SetField<T>(ref T field, T value, string propertyName)
    {
        if (EqualityComparer<T>.Default.Equals(field, value)) return false;
        field = value;
        OnPropertyChanged(propertyName);
        return true;
    }
    #endregion
    private String _name;
    public String Name { get { return _name; } set { SetField(ref _name, value, "Name"); } }
}

您应该尝试使用 MVVM 原则来解决此问题。换句话说,将数据网格数据绑定到视图模型中的集合,并将项添加到集合中。