WPF 绑定

zq1564171310 2015-03-19 07:06:19
有一个界面只有ListBox,当listbox绑定的List集合没有元素的时候,显示一张背景图,list有元素,则不显示。
...全文
177 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
thisishexiao 2015-03-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}}"/>
zq1564171310 2015-03-20
  • 打赏
  • 举报
回复
额,刚看了下IValueConverter,恩,应该能实现,我去试试,之前太执着用触发器了。
1987andy 2015-03-20
  • 打赏
  • 举报
回复
引用 4 楼 zq1564171310 的回复:
[quote=引用 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,否则不显示。[/quote]
引用 4 楼 zq1564171310 的回复:
[quote=引用 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,否则不显示。[/quote] WPF中有个叫做数据转换的接口IValueConverter,你可以通过实现该接口,然后应用到绑定的属性上,这样就可以实现不同类型属性间的转换了
zq1564171310 2015-03-20
  • 打赏
  • 举报
回复
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> 但是貌似没啥效果
thisishexiao 2015-03-20
  • 打赏
  • 举报
回复
引用 5 楼 zq1564171310 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:] 嗯,然后呢???问题呢?
问题:如何将Image的Visibility属性 ,绑定到ListBox的Count属性上,count为0,显示Image,count不为0,不显示[/quote] 一种是自定义一个值转换器(Converter),然后在绑定中使用这个值转换器。 另一种是在ViewModel里面添加一个类型为Visibility的属性,绑定到这个属性。在Count变化时更新该属性。
exception92 2015-03-20
  • 打赏
  • 举报
回复
引用 5 楼 zq1564171310 的回复:
[quote=引用 2 楼 duanzi_peng 的回复:] 嗯,然后呢???问题呢?
问题:如何将Image的Visibility属性 ,绑定到ListBox的Count属性上,count为0,显示Image,count不为0,不显示[/quote] 写个Converter转换类,绑定到Visibility属性上,而Count值最为 参数传进去。 程序中判断 count 并返回Visible或者Hiden;
zq1564171310 2015-03-20
  • 打赏
  • 举报
回复
引用 2 楼 duanzi_peng 的回复:
嗯,然后呢???问题呢?
问题:如何将Image的Visibility属性 ,绑定到ListBox的Count属性上,count为0,显示Image,count不为0,不显示
zq1564171310 2015-03-20
  • 打赏
  • 举报
回复
引用 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,否则不显示。
1987andy 2015-03-20
  • 打赏
  • 举报
回复
一种做法就是将自定义控件,将listbox和image作为该自定义控件的子控件 绑定后通过绑定后数据的通知来控制Image和listbox的显隐~
exception92 2015-03-20
  • 打赏
  • 举报
回复
嗯,然后呢???问题呢?
格拉 2015-03-20
  • 打赏
  • 举报
回复
一般是弄两个grid,一个放背景,一个放list,根据list的count属性,绑定到是否显示
zq1564171310 2015-03-20
  • 打赏
  • 举报
回复
给楼上的一点补充,以便后续的兄弟能更快的应用: 引用: xmlns:Converter="clr-namespace:CountToVisibilityConverter "
zq1564171310 2015-03-20
  • 打赏
  • 举报
回复
谢谢11楼,已经写好了,相对于现成的代码,感觉学到新的用法以及改变自己固有思维,是我正真学到的,之前对知识点用的太死板了。 感谢诸位,结贴了,感觉40分有点少,加30,每个人都有分。

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧