我們的應用程序設計用於以下三種模式中的任何一種模式。綁定特定附加屬性的值
public enum Mode
{
Express,
Premium,
Enterprise
}
有一個附加屬性:IsEnabled
根據Mode
定義。這樣我們就可以在XAML中設置特定控件是否啓用或者不在該模式下。 默認情況下,對所有模式啓用控制,除非使用該模式的附加屬性將其明確設置爲false。
<Button x:Name="Button1"
mode:Enterprise.IsEnabled="False"
IsEnabled="{Binding SelectedMode}"/>
<Button x:Name="Button2"
mode:Enterprise.IsEnabled="False"
mode:Premium.IsEnabled="False"
IsEnabled="{Binding SelectedMode}"/>
SelectedMode
屬性的值是上述enum
值中的任何一個。現在的問題是如何爲該特定模式設置控件的IsEnabled
屬性(Button
)。
它可以工作的一種方法是使用MultiBinding
如下,但我覺得它笨拙。所以想知道是否有更優雅的解決方案來處理這個問題。
<Button x:Name="Button2"
mode:Enterprise.IsEnabled="False"
mode:Premium.IsEnabled="False">
<Button.IsEnabled>
<MultiBinding Converter="{StaticResource ModeToBooleanConverter}">
<Binding Path="SelectedMode"/>
<Binding Path="mode:Enterprise.IsEnabled" RelativeSource="{RelativeSource Self}"/>
<Binding Path="mode:Premium.IsEnabled" RelativeSource="{RelativeSource Self}"/>
</MultiBinding>
</Button.IsEnabled>
</Button>
編輯:
我想有一個解決方案,使得如下所示和ModeToBooleanConverter
會完成所有的代碼雜波減少。
<Button x:Name="Button2"
mode:Enterprise.IsEnabled="False"
mode:Premium.IsEnabled="False"
IsEnabled="{Binding SelectedMode, Converter=ModeToBooleanConverter}"/>
謝謝。
很好的答案。在我的情況下唯一的問題是枚舉沒有FlagAttribute,枚舉來自另一個我無法控制的庫。 'enum's不能被繼承 – Marshal