none
wpf 数据触发器 RRS feed

  • 问题

  • WPF 数据触发器中能不能实现判读数据不等于那个数据,的。比如 数据不等于0,或者不等于null。

     我遇到的情况是。但这个数据等于0是,按钮可用, 可是当时数据不等于0,为任何数据是,按钮可用。

    2012年3月28日 10:16

答案

  • 你好!

    DataTrigger 默认的是去判断当绑定数据等于某个值时去执行一些操作,但是我们也可以通过实现 IValueConverter 接口给绑定创建自定义的逻辑。你可以参考以下代码:

    public class IsNullConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (value == null);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
        }
    }
    

    Xaml:

    <ListBox ItemsSource="{Binding}">
                <ListBox.Resources>
                    <conv:IsNullConverter x:Key="isNullConverter"/>
                </ListBox.Resources>
                <ListBox.ItemContainerStyle>
                    <Style TargetType ="{x:Type ListBoxItem}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Field, Converter={StaticResource isNullConverter}}" Value="False">
                                <Setter Property="Background" Value="Pink"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>

    更多关于这个问题的信息在这个帖子里可以找到。
    http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-null

    Have a nice day,


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月29日 4:41
    版主
  • ?????

    2012年3月31日 13:27

全部回复

  • 你好!

    DataTrigger 默认的是去判断当绑定数据等于某个值时去执行一些操作,但是我们也可以通过实现 IValueConverter 接口给绑定创建自定义的逻辑。你可以参考以下代码:

    public class IsNullConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return (value == null);
        }
    
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
        }
    }
    

    Xaml:

    <ListBox ItemsSource="{Binding}">
                <ListBox.Resources>
                    <conv:IsNullConverter x:Key="isNullConverter"/>
                </ListBox.Resources>
                <ListBox.ItemContainerStyle>
                    <Style TargetType ="{x:Type ListBoxItem}">
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding Field, Converter={StaticResource isNullConverter}}" Value="False">
                                <Setter Property="Background" Value="Pink"/>
                            </DataTrigger>
                        </Style.Triggers>
                    </Style>
                </ListBox.ItemContainerStyle>
            </ListBox>

    更多关于这个问题的信息在这个帖子里可以找到。
    http://stackoverflow.com/questions/356194/wpf-datatrigger-where-value-is-not-null

    Have a nice day,


    Kee Poppy [MSFT]
    MSDN Community Support | Feedback to us

    2012年3月29日 4:41
    版主
  • 谢谢回复.我在看又又没有其他答案.这个方法可行,但是感觉麻烦.如果没有其他解决方案.就用这个.
    2012年3月29日 6:24
  • ?????

    2012年3月31日 13:27
  • 两者都可以,比较正统的理解是,通过Style先设置默认值,然后通过触发器触发改变值 -〉 shixin.

    不过这个问题,我倒是推荐converter的方案,灵活性好,以后要修改起来也比Style的默认值来的方便。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月1日 15:53
    版主
  • 谢谢,对我技术上的支持。我再次表示感谢。这几天比较忙, 好久没有上MSDN了。呵呵

    2012年4月10日 9:33
  • Bob Bao   小弟问一下.是不是 事件触发器,只能作用 动画,故事版.  比如 button 得鼠标悬浮事件,我想改变显示得图片.这个这么做?我在里面找不到任何属性设置.是不是要在故事版里面设置.小弟不懂啊,请 Bob Bao  不吝赐教.
    2012年4月11日 2:15
  • >> 是不是 事件触发器,只能作用 动画,故事版

    是的. 

    >> 比如 button 得鼠标悬浮事件,我想改变显示得图片.这个这么做?我在里面找不到任何属性设置.是不是要在故事版里面设置.

    如果你要一个完全是XAML的解决方法,那么你可以用事件触发器,然后写一个关键帧动画放在故事板,设置这个图片Source属性。

    否则的话,我们是推荐你这个需求用后台代码来实现比较好。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    2012年4月11日 9:29
    版主