DataGrid 列自定义绑定

DataGrid Column Custom Binding

我是新手,遇到以下问题确实很挣扎:

  1. 我有一个下面的列,可以正确加载数据:

                 <xcdg:Column Title="TestData" FieldName="TestData" Width="1*" >
    
  2. 但我需要通过从弹出窗口中选择一个值来修改它 window。

    我之前已经解决过类似的,但它是针对文本框的:

                            <TextBox  Grid.Row="1" Grid.Column="1" Text="{Binding Model.TestData}">
                                <TextBox.InputBindings>
                                    <KeyBinding Key="F12" Command="{Binding SearchCommand}" CommandParameter="TestData"></KeyBinding>
                                </TextBox.InputBindings>
                            </TextBox>
    

不确定是否需要有关弹出窗口的更多信息,基本上它会返回选定的值,该值应该到达该列。

您只需将新值分配给适当的单元格即可。

DataRowView drv = myDataGrid.CurrentItem as DataRowView;
drv["FieldName"] = "New Value";

在下面显示的示例中,我使用带有 ID、名称和结果属性的弹出窗口 window。它将显示提供的 ID 和名称。用户可以编辑名称(我将 ID 字段设置为只读),然后单击确定或取消按钮。两者都会关闭弹出窗口,但只有单击确定按钮才会在关闭前将结果 属性 设置为真。然后我可以检查这个结果 属性 以了解我是否应该更新网格中的单元格。

private void btnShowPopup_Click(object sender, RoutedEventArgs e)
{
    // Get the grid's current row
    DataRowView drv = this.myGrid.CurrentItem as DataRowView;

    // Popup shows product's ID and Name (user can only edit Name)
    Popup popup = new Popup();
    popup.ProductID = drv["ProductID"].ToString();
    popup.ProductName = drv["ProductName"].ToString();
    popup.ShowDialog();

    // Apply changes if user clicked the OK button
    if (popup.Result == true)
        drv["ProductName"] = popup.ProductName;
}