2016-07-26 145 views
0

我很新,真正有以下问题而大伤脑筋:DataGrid列自定义绑定

  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

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

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

在下面的例子中所示,我使用与ID,名称和结果属性的弹出窗口。它将显示提供的ID和名称。用户可以编辑名称(我使ID字段为只读),然后单击确定或取消按钮。两者都会关闭弹出窗口,但只有在关闭之前单击OK按钮才会将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; 
} 
+0

感谢您的分享!你也可以分享xaml吗?我想知道是什么触发弹出窗口显示在这种情况下? (现在我不得不更改为使用CustomCellTemplate的常规DataGrid以使其工作,但学习如何在xceed中执行它将会很酷) – Denis

+0

我没有做任何事情,因为我只是在做一个快速测试,所以我只是在DataGrid下添加一个按钮并手动点击它。如果您希望弹出窗口对DataGrid上的用户操作作出反应,则必须捕获该事件并从此处调用弹出窗口。如果您有特定的情况并需要帮助,我建议通过电子邮件与我们联系:[email protected] –