【发布时间】:2017-11-21 17:50:29
【问题描述】:
背景:
我有一个DataGrid,其中填充了ObservableCollection。
ObservableCollection 在设计时不会包含任何项目。
我在 运行时 使用 TextBox 的内容更新集合,循环通过导入的 .Text/.CSV 文件并粘贴剪贴板中的文本。
正如您将在下面看到的,我在 XAML 中绑定集合并在 DataGrid 中指定列详细信息。
集合由要显示的数据的类启动。
我可以通过单击按钮直接将项目添加到DataGrid,它会出现,但是当我将它添加到ObservableCollection 时,它不会显示,尽管它已添加到集合中。
XAML:
<DataGrid x:Name="SysCheck_DataGrid"
BorderBrush="Gray"
AutoGenerateColumns="False"
ItemsSource="{Binding Path=_SysCheckDataGridSource, Mode=TwoWay}"
SelectionMode="Extended"
SelectionUnit="FullRow"
CanUserDeleteRows="True"
CanUserReorderColumns="True"
AlternatingRowBackground="Gainsboro"
AlternationCount="2">
<DataGrid.Columns>
<DataGridTextColumn Header="Hostname" Binding="{Binding Hostname}"/>
<DataGridTextColumn Header="IP Address" Binding="{Binding IPAddress}"/>
<DataGridTextColumn Header="Online" Binding="{Binding Online}"/>
<DataGridTextColumn Header="Last Restarted" Binding="{Binding LastRestarted}"/>
<DataGridTextColumn Header="OS" Binding="{Binding OS}"/>
</DataGrid.Columns>
</DataGrid>
C# 背后的代码:
private void SysCheck_Add_Button_Click(object sender, RoutedEventArgs e)
{
if (!string.IsNullOrWhiteSpace(SysCheck_Manuel_Add_TB.Text))
{
var item = _SysCheckDataGridSource.SingleOrDefault(
i => i.Hostname == SysCheck_Manuel_Add_TB.Text);
if (item == null)
{
SysCheck_DataGrid.Items.Add(new SystemCheckingNormal()
{ Hostname = SysCheck_Manuel_Add_TB.Text });
SystemChecking_Log.Text += Environment.NewLine + SysCheck_Manuel_Add_TB.Text
+ " was added to DataGrid " + "There are "
+ _SysCheckDataGridSource.Count + " items in the list";
SysCheck_Manuel_Add_TB.Clear();
}
else
{
SystemChecking_Log.Text += Environment.NewLine + SysCheck_Manuel_Add_TB.Text
+ " Is already in the DataGrid " + "There are "
+ _SysCheckDataGridSource.Count + " items in the list";
SysCheck_Manuel_Add_TB.Clear();
}
}
}
类代码:
public class SystemCheckingNormal
{
public string Hostname { get; set; }
public string IPAddress { get; set; }
public string Online { get; set; }
public string LastRestarted { get; set; }
public string OS { get; set; }
}
回答问题:
mm8 问:
您的ObservableCollection 在哪里以及您在哪里以及如何向其中添加项目?
答案:
public ObservableCollection<SystemCheckingNormal> _SysCheckDataGridSource;
在MainWindow 类中
和:
_SysCheckDataGridSource = new ObservableCollection<SystemCheckingNormal>();
在MainWindow() 构造函数中。
到目前为止,我在Click 事件中添加到集合中(在上面的代码中):
SysCheck_DataGrid.Items.Add(new SystemCheckingNormal()
{ Hostname = SysCheck_Manuel_Add_TB.Text });
【问题讨论】:
-
您的 ObservableCollection 在哪里以及您在哪里以及如何向其中添加项目?
-
使用前请阅读
Binding的属性。Mode=TwoWay对ItemsSource绑定没有意义。 -
@mm8 请看我原问题的回复
-
@NigelTatschner:请看我的回答。 _SysCheckDataGridSource 是一个字段。它必须是一个财产。添加 {get;放; } 部分。
标签: c# wpf xaml datagrid observablecollection