我搜索了檔案尋求幫助,但我找不到任何足夠具體的問題,我的特定問題。TreeViewItem使用用戶控件和綁定
我有一個使用MVVM綁定數據的TreeView,看起來都不錯。我想擴展這樣的功能,我認爲使用TreeView項目的用戶控件會很好。
這裏是由TreeViewItems使用的分層數據模板的XAML代碼:
<HierarchicalDataTemplate
DataType="{x:Type vm:SiteViewModel}"
ItemsSource="{Binding Children}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding SiteName}"/>
</StackPanel>
</HierarchicalDataTemplate>
我想和我的用戶控制取代的TextBlock:
<uc:MyTextBlock InternalText="{Binding SiteName}"/>
用戶控件(現在)僅包含另一個TextBlock並具有稱爲InternalText的依賴屬性,即
<TextBlock Text="{Binding Path=InternalText}" />
我在用戶控件的構造函數中設置DataContext的本身:
public MyTextBlock()
{
InitializeComponent();
DataContext = this;
}
這不是工作,而是如果我只是更改模板,以便它指定它似乎很好地工作靜態文本:
<uc:MyTextBlock InternalText="Some site name"/>
那麼如何獲得綁定數據傳遞給用戶控件?這可能是簡單的,但我是WPF的新手,所以我還沒有完成。
謝謝!
威爾,你是一個明星!自從上週以來我一直在關注這一點,並沒有取得什麼進展。非常感謝。現在我只想了解*爲什麼*它的工作原理!我想這是ElementName = root,所以我現在通過我的WPF書籍來看看。 –
@ChrisTrollen:DP是在課堂上定義的。這個類的公共屬性位於xaml的UserControl定義的根目錄中。因此,您可以通過某種方式引用UserControl的根節點來訪問綁定中的這些公共屬性。你可以通過給它一個名字'x:Name =「something」'或者通過使用相對源'{Binding Text,RelativeSource = {RelativeSource FindAncestor,AncestorType = UserControl}}'來實現。 – Will
啊,對 - 謝謝。我曾嘗試使用RelativeSource,但我不認爲將AncestorType設置爲用戶控件本身。 –