【问题标题】:ObservableCollection<T> item update eventObservableCollection<T> 项目更新事件
【发布时间】:2012-07-04 20:46:36
【问题描述】:

我正在使用 MVVM 编写 WPF 应用程序。我的物品有 ObservableCollection:

public ObservableCollection<VarValue> Values;

public class VarValue: INotifyPropertyChanging, INotifyPropertyChanged
{
    public double value
    {
        get
        {
            return this._value;
        }
        set
        {
            if (this._value != value)
            {
                this.OnvalueChanging(value);
                this.SendPropertyChanging();
                this._value = value;
                this.SendPropertyChanged("value");
                this.OnvalueChanged();
            }
        }
    }
}

绑定到dataGrid1:

dataGrid1.ItemsSource = Values;

<DataGrid EnableColumnVirtualization="true" EnableRowVirtualization="true" Name="dataGrid1" DockPanel.Dock="Top" AutoGenerateColumns="False" Height="120" Width="Auto" CanUserReorderColumns="False" CanUserResizeColumns="False" CanUserResizeRows="False" CanUserSortColumns="False" SelectionUnit="Cell">
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate><TextBlock Text='{Binding Values.value}'/></DataTemplate></DataGridTemplateColumn.CellTemplate>
    <DataGridTemplateColumn.CellEditingTemplate>
        <DataTemplate><TextBox Text='{Binding Values.value, Mode=TwoWay}'/></DataTemplate></DataGridTemplateColumn.CellEditingTemplate>
</DataGrid>

当用户编辑 dataGrid1 单元格时,我需要创建新的 VarValue 对象,并将其插入到现有集合中。例如:

  • datagrid 包含一个值为 1 的单元格
  • 用户将其更改为 value=2
  • 现在表格中必须有两个单元格:具有 1 和 2 个值。

我怎样才能做到这一点?

【问题讨论】:

    标签: c# .net wpf datagrid observablecollection


    【解决方案1】:

    您可以围绕 VarValue 创建一个包装器并将其绑定到您的网格中:

    public class VarValueVM : INotifyPropertyChanged
    {
        private VarValue _value;
        private ObservableCollection<VarValueVM> _values;
    
        public VarValueVM(VarValue value, ObservableCollection<VarValueVM> values)
        {
            _value = value;
            _values = values;
        }
    
        public double value
        {
            get
            {
                return _value.value;
            }
            set
            {
                if (this._value.value != value)
                {
                    _values.Add(new VarValueVM(new VarValue() { value = value }, _values));
                    this.SendPropertyChanged("value"); //In order to tell the grid that value did not change finally...
                }
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 1970-01-01
      • 2011-07-02
      • 2014-12-15
      • 2015-04-09
      • 1970-01-01
      • 2013-06-19
      相关资源
      最近更新 更多