2017-02-12 174 views
0

我有一个简单的数据网格与2列,我使用可观察集合填充。要求是为其中一列启用单元格编辑,然后使用按钮将列数据保存在某处。这是我迄今已实现了它:WPF Datagrid单元格值编辑C#

视图模型:

public class PlanningResult : INotifyPropertyChanged 
     { 
      public event PropertyChangedEventHandler PropertyChanged; 
      private void NotifyPropertyChanged([CallerMemberName] String propertyName = "") 
      { 
       if (PropertyChanged != null) 
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
      public string ProducerName { get; set; } 
      public string leasename { get; set; } 
} 

观察到的集合:

ObservableCollection<PlanningResult> populatePatternData = new ObservableCollection<PlanningResult>(); 
public ObservableCollection<PlanningResult> PopulatePatternData 
      { 
       get { return populatePatternData; } 
       set 
       { 
        populatePatternData = value; 
        base.OnPropertyChanged("StringList"); 
       } 
      } 

XAML:我设置了 “IsReadOnly=False” 为物业ProducerName,因此允许用户在需要时更新此值。

<DataGrid x:Name="PrintReport" ItemsSource="{Binding PopulatePatternData}" AutoGenerateColumns="False" FontFamily="Tahoma" FontSize="12" CanUserSortColumns="False" 
                HorizontalContentAlignment="Stretch" VerticalContentAlignment="Stretch" AlternatingRowBackground="Gainsboro" AlternationCount="1" 
                SelectionMode="Extended" SelectionUnit="Cell" > 

              <DataGrid.Columns> 
                <DataGridTextColumn Header="Pattern" Binding="{Binding ProducerName}" IsReadOnly="False" > 
                <DataGridTextColumn.ElementStyle> 
                 <Style> 
                  <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
                  <Setter Property="TextBlock.TextAlignment" Value="Center"/> 
                 </Style> 
                </DataGridTextColumn.ElementStyle> 
               </DataGridTextColumn> 
                <DataGridTextColumn Header="Lease" Binding="{Binding leasename}" IsReadOnly="True" > 
                <DataGridTextColumn.ElementStyle> 
                 <Style> 
                  <Setter Property="TextBlock.TextWrapping" Value="Wrap" /> 
                  <Setter Property="TextBlock.TextAlignment" Value="Center"/> 
                 </Style> 
                </DataGridTextColumn.ElementStyle> 
               </DataGridTextColumn> 

我的问题是什么是在如何“得到列(ProducerName)的更新值”,并重新填充observable collection方面的下一步是什么?

回答

1

使用双向模式绑定:

Binding="{Binding ProducerName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 

这将更新的ObservableCollection的具体项目,每当用户改变单元格的值。

此外,使用命令为了保存ObservableCollection的当前状态。请参阅this以及许多其他答案和文章。

+0

哇,这很容易! – user7157732