如何将内容添加到特定单元格?

时间:2016-07-03 17:32:35

标签: c# wpf

让我们说出我的数据网格定义:

<DataGrid.Columns>
      <DataGridTextColumn Header="In corso" Binding="{Binding Path = PlayingMatch}"/>
      <DataGridTextColumn Header="Terminati" Binding="{Binding Path = TerminatedMatch}" />
      <DataGridTextColumn Header="Totali" Binding="{Binding Path = TotalMatch}" />
</DataGrid.Columns>

如何在不定义ItemSource的情况下向特定单元格添加值?我只需要一行包含值。最终结果应该是这样的:

In corso | Terminati | Totali
     4         5         9

我已经创建了Path中定义的属性,如下所示:

private int _playingMatch = 0;
public int PlayingMatch
{
     get { return _playingMatch; }
     set { SetField(ref _playingMatch, value); }
}

但是当我调用属性时,我可以看到设置的值在set(value)上设置断点,遗憾的是没有添加值的新行。我做错了什么?

更新:

我已将此行添加到datagrid,我需要简单地使用属性值(PlayingMatch,TerminatedMatch,TotalMatch)更新此行,如何?

<DataGrid.Items>
  <RowDefinition />
</DataGrid.Items>

3 个答案:

答案 0 :(得分:1)

您可以使用匿名对象并执行此操作:

 Dgrd.Items.Add(new { PlayingMatch="abc",  TerminatedMatch="abc", TotalMatch="12"});

您可以使用Items清除Dgrd.Items.Clear()集合,从网格中删除所有项目。

要更改该项目,

Dgrd.Items.Clear();
Dgrd.Items.Add(new { PlayingMatch = "def", TerminatedMatch = "pqr", TotalMatch = "122" });

您可以使用dynamic

dynamic obj = new ObservableCollection<dynamic> { new { PlayingMatch = "abc", TerminatedMatch = "abc", TotalMatch = "12" } };
Dgrd.ItemsSource = obj;

答案 1 :(得分:0)

我假设您的绑定是正确的,并且Binding是正确的属性(实际上没有使用DataGrid)。您需要通知UI已对相应属性进行了更改。这是通过实现INotifyPropertyChanged接口并在设置值时调用它来完成的。互联网上有很多指南。此外,如果属性发生更改,则需要指定应为属性更新UI:

<DataGridTextColumn Header="Totali" Binding="{Binding Path = TotalMatch, UpdateSourceTrigger=PropertyChanged}" />

INotifyPropertyChanged指南: https://msdn.microsoft.com/en-us/library/ms229614(v=vs.100).aspx

此外,如果PropertyChangedEventHandler为null,则绑定存在问题。

答案 2 :(得分:0)

您是否设置了&#34; DataContext&#34;你的WPF表单指向暴露了getter / setter属性的控制器对象?如果没有,它仍会运行,但不会告诉你它无法找到&#34; bind&#34;对象,但也不会崩溃。

因此,您可能需要明确添加

DataContext = myControllerObject;

同样,如果您使用的是MVVM概念并且没有直接在表单中使用代码,我也不会知道表单,控制器。