WPF Datagrid单元格值编辑 - C#

时间:2017-02-12 05:46:35

标签: c# wpf datagrid

我有一个简单的数据网格,有两列,我使用一个可观察的集合填充。要求是为其中一个列启用单元格编辑,然后使用按钮,将列数据保存在某处。这就是我到目前为止实现它的方式:

查看型号:

 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 个答案:

答案 0 :(得分:1)

使用TwoWay模式绑定:

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

每当用户更改单元格的值时,这将更新ObservableCollection中的特定项目。

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