【问题标题】:How to capture value change event of Datagrid's cell in WPF?如何在WPF中捕获Datagrid单元格的值变化事件?
【发布时间】:2014-07-15 23:51:24
【问题描述】:

我正在使用Datagrid 来显示一些 MySQL 表。当然,我希望数据网格中的更改应该反映在 MySQL 表中。我已经编写了一个命令来处理 Cell value changed event,但是,该命令没有命中:

<DataGrid x:Name="Table_DataGrid" Grid.Row="0" Grid.Column="0"  
    HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Margin="0"
    ItemsSource="{Binding MyServerWrapViewModel.TableFromMySql,
                  Source={StaticResource Locator}}">
    <i:Interaction.Triggers>
        <i:EventTrigger EventName="TargetUpdated">
            <cmd:EventToCommand
                Command="{Binding updateCell}"/>
        </i:EventTrigger>
    </i:Interaction.Triggers>
</DataGrid>

我认为我听错了事件,因为我的updateCell 没有命中...你如何捕捉到datagrid 的cell value changed event

【问题讨论】:

    标签: c# mysql wpf datagrid


    【解决方案1】:

    我已经找到了解决办法。

    首先将相关的ViewModel添加为DataGrid's DataContext。否则编译器将不知道在哪里找到绑定命令。

    DataContext="{Binding MyServerWrapViewModel,Source={StaticResource Locator}}"
    

    然后将TargetUpdated更改为CurrentCellChanged

    【讨论】:

    • 这在 WPF 方式中看起来很奇怪。您必须将 ViewModel 设置为 DataGrid-surrounding View 的 DataContext。然后DataGrid自动获取相同的Context,因为它继承下来...
    【解决方案2】:

    为什么要附加活动?通常,您将针对 ObservableCollection 中对象的某些属性为您的 Column 创建一个 DataBinding。网格单元格中的更改将直接推送到您绑定的属性的设置器中。从那里你可以做任何你喜欢的事情,比如写入数据库或设置修改标志。

    【讨论】:

    • 您不能直接绑定到 MySQL 表。要读取 MySQL 表,您必须将其放入 DataTable by MySqlDataAdapter。要将更改反映回 MySQL 表,您有调用MySqlDataAdapterUpdate方法。
    • 这就是重点。您应该真正考虑创建反映您的表设计的对象并绑定到这些对象。提供类似于带有 ICommand 实现的 ViewModel 但将值推送到数据库中的东西不是 MVVM 风格(至少您将您的类称为 ...ViewModel)。
    • 即使加上,实现良好的验证、用户、反馈等也将变得更加困难......
    猜你喜欢
    • 2016-03-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多