WPF数据网格未更新

时间:2017-07-20 10:29:31

标签: c# wpf

嗨似乎有不同的原因,我尝试了其中一些,但它似乎没有用。

我的情景是: 我将一个项目添加到datasource的{​​{1}}链接到grid,然后运行命令行或其他代码。

问题

第一行显示但之后我可以添加行但它们不会显示在grid中。

我的代码:

查看

    <DataGrid Margin="5" Name="progress"
        AutoGenerateColumns="False" 
        CanUserAddRows="False" 
        SelectionMode="Extended" 
        SelectionUnit="Cell" 
        Height="150"
        ItemsSource="{Binding}">
     <DataGrid.Columns>
          <DataGridTextColumn Header="" Width="370" Binding="{Binding Action}" IsReadOnly="True" />
          <DataGridTextColumn Header="" Width="100" Binding="{Binding Success}" IsReadOnly="True" />
           </DataGrid.Columns>
  </DataGrid>

代码

ObservableCollection<StepResult> stepResults;
stepResults = new ObservableCollection<StepResult>();
progress.DataContext = stepResults;
private void Updater_StepStart(object sender, ScriptInterpreter.Events.StepEventArguments e)
{
     stepResults.Add(new StepResult
     {
        Action = e.StepName,
        Success = true
      });
}

到目前为止我尝试了什么:

progress.UpdateLayout();
progress.ItemsSource = null;
progress.ItemsSource = stepResults;

没有什么工作:(

1 个答案:

答案 0 :(得分:1)

您应该尝试将ObservableCollection设置为Property并将ItemsSource绑定到它。 像这样:

<DataGrid ItemsSource="{Binding stepResult}"/>

Code-Behind:

private ObservableCollection<StepResult> _stepResults;
public ObservableCollection<StepResult> StepResults
{
    get { return _stepResults; }
    set
    {
        if (_stepResult == value)
            return;
        _stepResults = value;
        OnPropertyChanged();
    }
}

并设置DataContext,如下所示:

progress.DataContext = this;

这应该有效。至少它几乎总是为我做的。