绑定来自datagrid单元格的文本框用户输入

时间:2019-06-28 12:39:52

标签: c# wpf xaml mvvm datagrid

我有一个非常简单的CRUD应用程序,它可以在datagrid中显示数据库中的数据。这很好。我想在数据网格中有一个注释列,其中每一行都有一个文本框,用户可以在其中插入注释。问题是,显示数据的类中的属性未使用注释更新。 我可以为该列使用带有IsReadonly =“ False”的简单DataGridTextColumn。这实际上得到了注释,但是看起来很糟糕,用户必须双击该单元格才能输入它。使用文本框,验证看起来更加顺畅,用户只需单击一次即可输入,但此处的绑定无效。我尝试了DataGridTemplateColumn的不同变体,但似乎无法正确处理或找到有效的示例。 我想念什么?

<DataGridTemplateColumn Header="Comment" Width="120" IsReadOnly="False">
                        <DataGridTemplateColumn.CellTemplate>
                            <DataTemplate>
                                <TextBlock Text="{Binding Path=UserComment}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellTemplate>
                        <DataGridTemplateColumn.CellEditingTemplate>
                            <DataTemplate>
                                <TextBox IsEnabled="true" Text="{Binding Path=UserComment}"/>
                            </DataTemplate>
                        </DataGridTemplateColumn.CellEditingTemplate>
                    </DataGridTemplateColumn>

1 个答案:

答案 0 :(得分:0)

在您的ViewModel中,不要忘记在更新值之后通知属性已更改。 其他视图不知道它必须同步。

An elegant way to implement INotifyPropertyChanged

一种基本方法是:

private string _userComment;

public string UserComment
{
   get { return _userComment; }
   set 
   {
      _userComment = value;
      PropertyChanged("UserComment");
   }
}

private void PropertyChanged(string prop)
{
   if( PropertyChanged != null )
   {
      PropertyChanged(this, new PropertyChangedEventArgs(prop);
   }
}