2016-07-26 99 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] –