2015-12-29 40 views
0

我有一個帶兩個MultiBindings的TextBlock。我想將用戶控件從此中刪除,因爲我需要多個實例。實例之間的唯一區別是名稱,並且僅作爲MultiBinding的一種參數。WPF注入或繼承用戶控件中的名稱

<TextBlock x:Name="That">< 
    TextBlock.Foreground> 
    <MultiBinding Converter="{StaticResource multiValueFgColorConverter}"> 
     <Binding ElementName="That" Path="Name" /> 
     <Binding Path="TimerState" Mode="TwoWay" /> 
     <Binding Path="Which" Mode="TwoWay" /> 
    </MultiBinding> 
</TextBlock.Foreground><TextBlock.Opacity> 
    <MultiBinding Converter="{StaticResource multiValueOpacityConverter}"> 
     <Binding ElementName="That" Path="Name" /> 
     <Binding Path="TimerState" Mode="TwoWay" /> 
     <Binding Path="Which" Mode="TwoWay" /> 
    </MultiBinding> 
</TextBlock.Opacity><Bold><Run Text="That"/></Bold> 

- 是否有辦法注入名稱的用戶控件的實例?
- 或者,也許將此用戶控件包裝在使用它的另一個控件中,並讓UC繼承父級名稱?

<grid x:Name="That"> 
    <my:UC/> <!-- 'Inherits' "That"? --> 
</grid> 

- 或者,有沒有辦法將字符串作爲參數傳遞給MultiBinding?據我所知,MultiBinding並不採用ConverterParameters,所以它必須通過綁定(雖然我可能不知道更好的方法...)
感謝您的任何見解 -

回答

0

UserControl公開依賴項屬性並在MultiBinding內綁定到它。 UserControl的每個實例都可以將綁定分配給特定屬性,從而使multiBinding更新。
就繼承而言,只要允許這樣做,就可以繼承屬性的值。 x:名稱不能被繼承。

+0

如果我的理解正確:向UC中添加一個Dependency屬性,並綁定到MultiBinding中。這是什麼語法 - 綁定到控件上的DP?控件的datacontext是一個ViewModel;其他綁定項目引用ViewModel類中的屬性。謝謝回覆。 – Number8

+0

將頂視圖元素的DataContext而不是UserControl分配給ViewModel。然後,您可以使用UserControl的DataContext將綁定設置爲UserControl的RelativeType,或者將x:Name設置爲UserControl,並使用綁定ElementName引用它。如果您不更改ViewModel分配,則DP將綁定到UserControl的ViewModel,而不是外部ViewModel,而目標屬性駐留在此處。 – Maximus

+0

爲了獲得更明智的見解,請參閱http://blog.scottlogic.com/2012/02/06/a-simple-pattern-for-creating-re-use-usercontrols-in-wpf-silverlight.html – Maximus

0

自從我觸摸WPF以來已經有一段時間了,你不能使用相對來源嗎? 見下文。 How do I use WPF bindings with RelativeSource?

+0

謝謝,我終於想出了RelativeSource。添加一個稱爲ThisName的依賴屬性給UC,並且在MultiBinding中像這樣綁定它: 當我創建UC,我設置了ThisName屬性,Bob是你的叔叔...... – Number8