加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

xaml – DataTriggerBehavior不适用于Enum?

发布时间:2020-12-14 02:46:35 所属栏目:Windows 来源:网络整理
导读:我正在尝试使用Behaviors SDK中的DataTriggerBehavior.但它似乎与枚举无关……或者我做错了什么. 您可以假设这些示例的DataContext是这样的(实现了INotifyPropertyChanged,但我不打算在此处显示): public class MyDataClass{ public MyEnum ItemCommand { g
我正在尝试使用Behaviors SDK中的DataTriggerBehavior.但它似乎与枚举无关……或者我做错了什么.

您可以假设这些示例的DataContext是这样的(实现了INotifyPropertyChanged,但我不打算在此处显示):

public class MyDataClass
{
    public MyEnum ItemCommand { get; set; }
    public string ItemCommandString { get; set; }
}

public enum MyEnum
{
    EnumValue1
}

_Button.DataContext = new MyDataClass() { ItemCommand = MyEnum.EnumValue1,ItemCommandString = "EnumValue1" };

以下代码不起作用(尝试指定枚举值并检查ItemCommand枚举属性):

<ToggleButton x:Name="_Button">
    <Interactivity:Interaction.Behaviors>
        <Core:DataTriggerBehavior Binding="{Binding ItemCommand}" 
                                  Value="EnumValue1">
            <Core:ChangePropertyAction PropertyName="Command" 
                                       TargetObject="{Binding ElementName=_Button}"
                                       Value="{x:Null}">
            </Core:ChangePropertyAction>
        </Core:DataTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</ToggleButton>

并且此代码(检查枚举资源)也不起作用:

<UserControl.Resources>
    <local:MyEnum x:Key="_MyEnumValue">EnumValue1</local:MyEnum>
</UserControl.Resources>

<ToggleButton x:Name="_Button">
    <Interactivity:Interaction.Behaviors>
        <Core:DataTriggerBehavior Binding="{Binding ItemCommand}" 
                                  Value="{StaticResource _MyEnumValue}">
            <Core:ChangePropertyAction PropertyName="Command" 
                                       TargetObject="{Binding ElementName=_Button}"
                                       Value="{x:Null}">
            </Core:ChangePropertyAction>
        </Core:DataTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</ToggleButton>

而这段代码(检查字符串)确实有效:

<ToggleButton x:Name="_Button">
    <Interactivity:Interaction.Behaviors>
        <Core:DataTriggerBehavior Binding="{Binding ItemCommandString}" 
                                  Value="EnumValue1">
            <Core:ChangePropertyAction PropertyName="Command" 
                                       TargetObject="{Binding ElementName=_Button}"
                                       Value="{x:Null}">
            </Core:ChangePropertyAction>
        </Core:DataTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</ToggleButton>

在DataTriggerBehavior Value属性中指定枚举值的正确方法是什么,以便这可以工作?

解决方法

你可以写一个转换器:

public class MyEnumConverter : IValueConverter
    {
        public object Convert(object value,Type targetType,object parameter,string language)
        {
            MyEnum myEnumValue = (MyEnum)value;
            return myEnumValue.ToString();
        }

        public object ConvertBack(object value,string language)
        {
            throw new NotImplementedException();
        }
    }

并在XAML中使用它:

<ToggleButton x:Name="_Button">
    <Interactivity:Interaction.Behaviors>
        <Core:DataTriggerBehavior Binding="{Binding ItemCommand,Converter={StaticResource MyEnumConverter}}" 
                                  Value="EnumValue1">
            <Core:ChangePropertyAction PropertyName="Command" 
                                       TargetObject="{Binding ElementName=_Button}"
                                       Value="{x:Null}">
            </Core:ChangePropertyAction>
        </Core:DataTriggerBehavior>
    </Interactivity:Interaction.Behaviors>
</ToggleButton>

或者直接绑定到示例中的字符串.不幸的是,WinRT中的DataTriggerBehavior比Windows Phone 8中的DataTrigger更糟糕

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读