DataGrid列自定义绑定

时间:2016-07-26 10:43:08

标签: wpf data-binding xceed

我很新,并且真的很难解决以下问题:

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

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

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

                            <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>
    
  3. 不确定是否需要有关弹出窗口的更多信息,基本上它会返回所选的值,该值应该到达列。

1 个答案:

答案 0 :(得分:1)

您可以简单地将新值分配给相应的单元格。

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

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

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;
}