2012-07-22 73 views
1

我在UI中有10個相同類型的UI控件,並且所有將使用相同的多重綁定轉換器。WPF MultiBinding具有不同綁定路徑的相同轉換器

問題是我無法創建多重綁定的通用樣式,我可以將其應用於所有UI控件以避免重複的代碼,因爲每個控件都將使用不同的綁定屬性作爲綁定轉換器。

有什麼辦法可以在WPF中避免這種情況下的重複代碼?

回答

2

「定製」默認綁定+結合您可以extend MarkupExtension,它允許你定義一個自定義轉換器的包裝,然後只是把它2條路徑。

編輯:在你的情況下,最好直接從MultiBinding繼承,並在構造函數中設置合理的默認值。

1

我假設你有這樣的事情:

<Button> 
    <Button.Content> 
    <MultiBinding Converter="{StaticResource conv}"> 
     <Binding Path="COMMON" /> 
     <Binding Path="SPECIFIC1" /> 
    </MultiBinding> 
    </Button.Content> 
</Button>  
<Button> 
    <Button.Content> 
    <MultiBinding Converter="{StaticResource conv}"> 
     <Binding Path="COMMON" /> 
     <Binding Path="SPECIFIC2" /> 
    </MultiBinding> 
    </Button.Content> 
</Button> 
<Button> 
    <Button.Content> 
    <MultiBinding Converter="{StaticResource conv}"> 
     <Binding Path="COMMON" /> 
     <Binding Path="SPECIFIC3" /> 
    </MultiBinding> 
    </Button.Content> 
</Button> 

等等... 這個長相醜陋,我同意。 我不知道有任何替代方法,但通過稍微思考,您可以創建(imo)一個更好的解決方案:

只需創建新的CommonMultiBindings.xaml;其中包括:

<MultiBinding Converter="{StaticResource conv}"> 
</MultiBinding> 

and voila,done。現在只是引用它作爲CommonMultiBindings對象,並使用它作爲:

<Button.Content> 
    <CommonMultiBindings> 
     <!--Actual bindings here--> 
    </CommonMultiBindings> 
</Button.Content> 

可以通過分解「」到CommonMultiBindings和增加新的屬性(UserBindings)將用於之間的綁定屬性來同步採取進一步。

理想情況下,您需要創建一個具有style屬性的自定義MultiBinding類。然後,你可以做這樣的事情與被自動添加到「綁定」徵收

<Grid.Resources> 
    <Style TargetType="MultiBinding"> 
    <Setter Property="Converter" Value="{StaticResource conv}" /> 
    </Style> 
</Grid.Resources> 
相關問題