2016-03-15 74 views
1

有誰知道如何爲textblock.text綁定動態設置ElementName?TextBlock綁定到選定的DataGrid元素

我有兩個Datagrids具有相同的信息,但第二個DataGrid只是一個數據源相同的過濾器,但我想要的是將文本塊的文本綁定到選定的項目,具體取決於該項目是否在主數據網格或輔助數據網格。

我有下面的代碼來綁定textblock到一個數據網格,但我也想同樣的情況發生,如果用戶點擊secondDataGrid中的項目。

這可能嗎?

<TextBlock Margin="29,0" Text="{Binding SelectedItem.Name, ElementName=MainDataGrid}" 
+1

他們共享相同的'ItemsSource'嗎?如果選擇「DataGrid」中的項目,那麼選擇項目就可以了。將在另一個「DataGrid」(同步選定項目)中自動選擇。 – dkozl

+0

它們共享相同的ItemSource,但我不熟悉同步的選定項目。可以你進一步解釋? – ExcelNoobie25

回答

0

這是可能的,但我不認爲這是正確的解決方案。

您可以處理DataGrid中的代碼隱藏,其中在處理程序,你可以寫下面的代碼事件之一:

BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, 
          new Binding("SelectedItem.Name") 
          { 
           ElementName = "DataGrid1" 
          }); 

基本上你重置將TextBlock的Text屬性綁定使用此代碼,其中:

  • textBlock是TextBlock的名稱;

  • 使用TextBlock.TextProperty您可以定義要使用TextBlock上的Text屬性;

  • 第三個參數是新的綁定本身。構造函數接受綁定的路徑,然後在「body」中設置ElementName。

如果DataGrid1中激發你的ElementName設置爲DataGrid的名字的情況下,如果DataGrid2觸發事件,那麼你的的ElementName設置爲第二DataGrid的名字。

SelectionChanged可以處理DataGrid上的一個好事件,但是如果您希望TextBlock在您選擇時更新並在第一個元素中進行更新,然後在第二個元素中選擇另一個,然後再單擊回到第一個元素進行更新您還需要處理GotFocus事件。 和它一起玩,你會明白我的意思。

我的工作例如:

private void SetBindingOnTextBlock(string elementName) 
{ 
    BindingOperations.SetBinding(textBlock, TextBlock.TextProperty, new Binding("SelectedItem.Name") 
    { 
     ElementName = elementName 
    }); 
} 

private void DataGrid_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{ 
    SetBindingOnTextBlock("DataGrid1"); 
} 

private void DataGrid_SelectionChanged_1(object sender, SelectionChangedEventArgs e) 
{ 
    SetBindingOnTextBlock("DataGrid2"); 
} 

private void DataGrid1_GotFocus(object sender, RoutedEventArgs e) 
{ 
    SetBindingOnTextBlock("DataGrid1"); 
} 

private void DataGrid2_GotFocus(object sender, RoutedEventArgs e) 
{ 
    SetBindingOnTextBlock("DataGrid2"); 
} 

更新1:

設置

IsSynchronizedWithCurrentItem="True" 
在DataGrid中

,如果ItemsSources是相同的,可以解決你的問題。 (不知道這是@dkozl的意思)我原本以爲他們是不同的。

+0

這看起來好像會起作用,但我希望如果可以的話,將它全部保留在xaml中。如果沒有別的東西出現,我會嘗試這種方法。謝謝。 – ExcelNoobie25

+0

沒問題。查看更新! – Akos

+0

做到了!認爲它必須是我錯過的簡單東西。我是wpf的新手,所以它是一個學習過程。你知道使用IsSynchronizedWithCurrentItem =「True」有什麼缺點嗎? – ExcelNoobie25