现在的位置: 首页 > 综合 > 正文

WP 数据绑定Visibility

2012年02月25日 ⁄ 综合 ⁄ 共 2650字 ⁄ 字号 评论关闭

发现又懒了很久了

随便画点字吧

 

在WP中,一些控件(如ListBox)模板数据绑定的时候,可能需要根据需要绑定的数据,来动态的选择一些内容是否显示(额,不会表达,其实简单的说就是绑定控件的Visibility)

其实方法是和SL一样的,需要一个转换类来转换成Visibility.Collapsed或者Visibility.Visible

 

比如新建一个工程VisibilityBinding

image

 

然后创建一个转换类ConvertVisibility.cs,继承于IValueConverter(记得添加引用using System.Windows.Data)

代码:

using System;
using System.Windows;
using System.Windows.Data;

namespace VisibilityBinding
{
    public class ConvertVisibility : IValueConverter
    {
        public ConvertVisibility()
10         {
11         }
12
13         public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
14         {
15             if (value == null)
16             {
17                 //设置当输入不存在时的默认返回值
18                 return Visibility.Collapsed;
19             }
20             bool s = (bool)value;
21             //根据输入,判断返回值
22             return (s != true) ? Visibility.Collapsed : Visibility.Visible;
23         }
24         public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
25         {
26             throw new NotImplementedException();
27         }
28     }
29 }

 

我们再添加一个数据类itemdata,用于绑定数据:

namespace VisibilityBinding
{
    public class itemdata
    {
        public string Name
        { get; set; }
        public string Score
        { get; set; }
        public bool Visibilitytype
10         { get; set; }
11     }
12 }

 

然后我们回到MainPage.xaml,拖入个Listbox,并简单编辑下绑定模板

image

 

然后现在页面顶部添加引用

1 xmlns:Local="clr-namespace:VisibilityBinding"

 

然后在页面里添加资源:

1             <Grid.Resources>
2                 <Local:ConvertVisibility x:Key="dataconverter"/>
3             </Grid.Resources>

 

最后设定绑定数据的转换:

1 <TextBlock TextWrapping="Wrap" Text="{Binding Name}" Margin="0,0,15,0" Width="200"  Visibility="{Binding Path=Visibilitytype,Converter={StaticResource dataconverter}}" />

 

然后设定数据绑定:

using System.Collections.Generic;
using System.Windows;
using Microsoft.Phone.Controls;

namespace VisibilityBinding
{
    public partial class MainPage : PhoneApplicationPage
    {
        public MainPage()
10         {
11             InitializeComponent();
12         }
13
14         private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
15         {
16             List<itemdata> idata = new List<itemdata>();
17             idata.Add(new itemdata("语文","80",true));
18             idata.Add(new itemdata("数学", "86", false));
19             idata.Add(new itemdata("英语", "84", true));
20             idata.Add(new itemdata("计算机", "76", false));
21             lb.ItemsSource = idata;
22         }
23     }
24 }

 

运行看看效果:

image

 

 

 

其实真个很简单,关键是在转换类做对应的处理,即使输入不是bool型的,只要在转换类做对应的处理,返回Visibility.Collapsed或者Visibility.Visible就可以了

 

 

源码:

【上篇】
【下篇】

抱歉!评论已关闭.