如何在数据网格中添加项目(智能方式)
本文关键字:项目 智能 方式 添加 数据 数据网 网格 | 更新日期: 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 原则来解决此问题。换句话说,将数据网格数据绑定到视图模型中的集合,并将项添加到集合中。