Code Bye

WPF listbox绑定的List集合无元素时显示一张图,有元素则不显示

有一个界面只有ListBox,当listbox绑定的List集合没有元素的时候,显示一张背景图,list有元素,则不显示。


10分
一般是弄两个grid,一个放背景,一个放list,根据list的count属性,绑定到是否显示

10分
一种做法就是将自定义控件,将listbox和image作为该自定义控件的子控件

绑定后通过绑定后数据的通知来控制Image和listbox的显隐~ 

引用 1 楼 clxcxx 的回复:

一般是弄两个grid,一个放背景,一个放list,根据list的count属性,绑定到是否显示

道理我明白,其实都不用两个Grid,直接同一个Grid,将里面一个ListBox和一个Image,Image铺满屏幕,然后Image的层级比ListBox上面,Image会显示在Listbox上面。然后Image的Visibility属性绑定list.count(list是listBox绑定的数据集合)如何实现?

引用 3 楼 u011573693 的回复:

一种做法就是将自定义控件,将listbox和image作为该自定义控件的子控件

绑定后通过绑定后数据的通知来控制Image和listbox的显隐~ 

有道理,关键问题在于如何将一个集合的count属性,绑定到Image的Visibility属性上。实现:当list的count为0,显示Image,否则不显示。

问题:如何将Image的Visibility属性 ,绑定到ListBox的Count属性上,count为0,显示Image,count不为0,不显示

15分
写个Converter转换类,绑定到Visibility属性上,而Count值最为 参数传进去。 程序中判断   count 并返回Visible或者Hiden;

15分
引用 5 楼 zq1564171310 的回复:
Quote: 引用 2 楼 duanzi_peng 的回复:

嗯,然后呢???问题呢?

问题:如何将Image的Visibility属性 ,绑定到ListBox的Count属性上,count为0,显示Image,count不为0,不显示

一种是自定义一个值转换器(Converter),然后在绑定中使用这个值转换器。
另一种是在ViewModel里面添加一个类型为Visibility的属性,绑定到这个属性。在Count变化时更新该属性。

Converter,不太熟,基本不会

<Grid>
        <Image Name=”image” Height=”300″ Width=”525″ Panel.ZIndex=”2″ Visibility=”{Binding}”></Image>
        <ListBox Name=”listBox” Height=”300″ Width=”525″></ListBox><!–后台binding了list集合–>
</Grid>

请问这个怎么弄?

我原本想用触发器来做的,isListCountZero = list.count
  <Image.Style>
                <Style TargetType=”Image”>
                    <Setter Property=”Source” Value=”{Binding isListCountZero}”/>
                    <Style.Triggers>
                        <DataTrigger Binding=”{Binding isListCountZero}” Value=”true”>
                            <Setter Property=”Visibility” Value=”Visible” />
                        </DataTrigger>
                        <DataTrigger Binding=”{Binding isListCountZero}” Value=”false”>
                            <Setter Property=”Visibility” Value=”Hiden” />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </Image.Style>
但是貌似没啥效果


10分
WPF中有个叫做数据转换的接口IValueConverter,你可以通过实现该接口,然后应用到绑定的属性上,这样就可以实现不同类型属性间的转换了

20分
还是上代码吧。。。
怎么定义自己的Converter?定义一个类,然后实现IValueConverter接口中的两个方法就行啦。
    public class CountToVisibilityConverter : IValueConverter
    {
        //从源到目标的转换
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            //value对应源的值,在你的问题里就是代表count
            var cnt = value as Int32;
            //返回值对应目标的值,在你的问题里就代表Visibility
            if (cnt > 0)
            {
                return Visibility.Visible;
            }
            else
            {
                return Visibility.Hidden;
            }
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

怎么在绑定里使用它?通常,首先要创建一个CountToVisibilityConverter资源,比如

    <Window.Resources>
        <Converter:CountToVisibilityConverter x:Key="VisibilityConverter"/>
    </Window.Resources>

然后在绑定的时候用这个资源设置Binding的Converter属性,比如:

        <Image Visibility="{Binding ElementName=listbox, Path=Items.Count, Converter={StaticResource VisibilityConverter}}"/>
给楼上的一点补充,以便后续的兄弟能更快的应用:
引用:  xmlns:Converter=”clr-namespace:CountToVisibilityConverter ”

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明WPF listbox绑定的List集合无元素时显示一张图,有元素则不显示