下面是我的情況的非常快速和簡單的解釋。我已經定義了一個樣式Hyperlink
控制和他們有Command
屬性綁定到一個ViewModel
類(簡體)中定義的命令:WPF:在樣式和/或數據模板(MVVM)中綁定命令?
<Window.Resources>
...
<Style x:Key="hyperlinkStyle" TargetType="Hyperlink">
...
<Setter Property="Command" Value="{Binding Path=OpenHyperlinkCommand}" />
...
</Style>
...
</Window.Resources>
接下來,我創建了我設計的窗口內容的控制。它有一個定義的數據模板,寫在窗口資源中。在該數據模板中,我添加了一些超鏈接,並將這些超鏈接設置爲使用之前定義的樣式。
窗口看起來像這樣(簡化):
<Window>
...
<ContentControl
...
ContentTemplate="{StaticResource myDataTemplate}" />
...
</Window>
數據模板看起來像這樣(簡化):
<Window.Resources>
...
<DataTemplate x:Key="myDataTemplate DataType="{x:Type my:MyType}">
...
<TextBlock>
<Hyperlink
Style="{StaticResource hyperlinkStyle}"
CommandParameter="{Binding Path=Uri1}">
<TextBlock Text="{Binding Path=Uri1}" />
</Hyperlink>
</TextBlock>
...
<TextBlock>
<Hyperlink
Style="{StaticResource hyperlinkStyle}"
CommandParameter="{Binding Path=Uri2}">
<TextBlock Text="{Binding Path=Uri2}" />
</Hyperlink>
</TextBlock>
...
</DataTemplate>
...
</Window.Resources>
的風格,因爲不工作的OpenHyperlinkCommand
結合綁定到它的窗口的ViewModel
包含此命令,但DataTemplate
綁定到MyType
對象,該對象不包含此命令(也不應該)。
我應該如何使這個綁定工作?兩個問題:
這裏是我的建議:我叫我的窗口
x:Name="myWindow"
,並改變了命令的 結合的樣式裏面這樣的:<Setter Property="Command" Value="{Binding ElementName=myWindow Path=DataContext.OpenHyperlinkCommand}" />
這工作,但它看起來那麼髒。我做錯了嗎?有沒有更好的方法,更多 MVVM-like?這是脆弱的,因爲我在一個樣式中設置了特定的元素名稱!
在第一個 的地方寫一個風格的命令綁定是一個好習慣嗎?如果不是,還有什麼選擇?如果我開發了一個複雜的
UserControl
, 如何將命令設置到其邏輯樹內深處的組件?
感謝您的幫助!
這只是讓我很快樂.. 。 謝謝! – danjarvis 2011-05-20 15:57:20