2012-09-07 52 views
1

可以說,我有以下的用戶控件:訪問嵌入WPF控件在XAML

<UserControl x:Class="MyUserControl"> 
    <tk:DataGrid> 
     <tk:DataGrid.Columns> 
      <!-- some columns --> 
     </tk:DataGrid.Columns> 
    </tk:DataGrid> 
</UserControl> 

其實,我無法定義數據網格中應該有哪些列,因爲我需要在許多使用這種控制地方,與不同的列。這是我想要做的:

<UserControl x:Class="MyPanel"> 
    <ui:MyUserControl> 
     <Columns> 
      <!-- columns that will go into the data grid --> 
     </Columns> 
    </ui:MyUserControl> 
</UserControl> 

是否有可能實現這一目標?

P.S:DataGrid.Columns是隻讀的,它不可能綁定到其他東西。

回答

2

您可以在UserControl上公開名爲Columnsdepenency property,它可以綁定到內部DataGrid。您當然可以通過<ui:MyUserControl.Columns>訪問酒店。

+0

我試過類似的東西,但是,綁定到DataGrid.Columns是不可能的。 DataGrid.Columns是隻讀的,不允許綁定。我認爲我應該可以在代碼中做到這一點,但是,我希望以更簡單/乾淨的方式實現此目標,並且如果可能,請通過xaml(唯一)實現。 – David

+0

如果無法綁定,您可以在此回調中附加註冊依賴項屬性的['PropertyChangedCallback'](http://msdn.microsoft.com/en-us/library/system.windows.propertychangedcallback.aspx)然後您可以手動清除內部DataGrid的列並添加新的列。 –

1

As @ H.B。在他的解決方案中說,你應該公開你自己的依賴項屬性,但只是執行綁定不起作用,因爲Columns屬性是隻讀的。

您需要做的是在您的依賴項屬性的OnChange回調中處理此操作,並根據需要添加/刪除列。您還需要註冊到您的依賴項屬性的CollectionChanged事件以及可能的網格的列CollectionChanged以及同步這兩個屬性。

不幸的是,我不認爲這有一個僅用於XAML的解決方案。