[英]Generically replace Converter in MultiBinding node
我有一些RadioButton's
,我想根據ViewModel
多個屬性更改其Visibility
。 每個RadioButton's
可見性將基於相同的屬性列表而有所不同。 我有以下xaml:
<RadioButton Command="{Binding Path=SomeCommand}"
CommandParameter="SomeCommandParameter"
Content="RB 1">
<RadioButton.Visibility>
<MultiBinding Converter="{StaticResource Rb1Visibility}">
<Binding Path="Value1"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Value2"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</RadioButton.Visibility>
</RadioButton>
我想為每個RadioButton
選項更改Converter
,但其他所有內容都將保持不變(所有綁定)。 我不想為此重復所有xaml代碼。 我最初嘗試為RadioButton創建樣式,但是我不知道如何將Converter傳遞給Style資源:
<Style x:Key="RbVisibilityStyle"
TargetType="{x:Type RadioButton}">
<Setter Property="Visibility">
<Setter.Value>
<MultiBinding Converter="{???? Pass in converter ?????}">
<Binding Path="Value1"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Value2"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
我可以為ViewModel中的每個RadioButton
創建一個“ Visibility”屬性,但這會向ViewModel中添加大量代碼並添加PropertyChanged
事件處理。 有沒有一種簡單的方法可以使MultiBinding泛泛化,因此我不會在整個xaml文件中重復代碼? 我應該采取其他方法嗎?
更新-添加更復雜的示例
<RadioButton Command="{Binding Path=SomeCommand}"
CommandParameter="SomeCommandParameter"
Content="RB 1">
<RadioButton.Visibility>
<MultiBinding Converter="{StaticResource Rb1Visibility}">
<Binding Path="Value1"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Value2"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</RadioButton.Visibility>
</RadioButton>
<RadioButton Command="{Binding Path=SomeCommand2}"
CommandParameter="SomeCommandParameter2"
Content="RB 2">
<RadioButton.Visibility>
<MultiBinding Converter="{StaticResource Rb2Visibility}">
<Binding Path="Value1"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Value2"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</RadioButton.Visibility>
</RadioButton>
<RadioButton Command="{Binding Path=SomeCommand3}"
CommandParameter="SomeCommandParameter3"
Content="RB 3">
<RadioButton.Visibility>
<MultiBinding Converter="{StaticResource Rb3Visibility}">
<Binding Path="Value1"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Value2"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</RadioButton.Visibility>
</RadioButton>
如何在此處減少MultiBinding
冗余?
想要為每個RadioButton選項更改Converter,
創建一個新的MultiValueConverter,它帶有一個額外的參數(單選按鈕選項),然后根據該選項將調用簡單地路由到相應的轉換器。
可以將選項放在控件的Xaml的Tag
屬性中。
我不清楚您提到的選項是什么,因此在我的示例中,讓我們通過其Tag
屬性唯一地標識每個單選按鈕,並使用路由轉換器根據提供的Tag
查找合適的轉換器。
<RadioButton Tag="1"/><RadioButton Tag="2"/>
然后更改樣式以使用帶有新參數的新轉換器:
<Style x:Key="RbVisibilityStyle"
TargetType="{x:Type RadioButton}">
<Setter Property="Visibility">
<Setter.Value>
<MultiBinding Converter="{StaticResource RouterViaTagVisibilityConverter">
<Binding Path="Value1"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Value2"
RelativeSource="{RelativeSource Self}" />
<Binding Path="Tag"
RelativeSource="{RelativeSource Self}" />
</MultiBinding>
</Setter.Value>
</Setter>
</Style>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.