发现又懒了很久了
随便画点字吧
在WP中,一些控件(如ListBox)模板数据绑定的时候,可能需要根据需要绑定的数据,来动态的选择一些内容是否显示(额,不会表达,其实简单的说就是绑定控件的Visibility)
其实方法是和SL一样的,需要一个转换类来转换成Visibility.Collapsed或者Visibility.Visible
比如新建一个工程VisibilityBinding
然后创建一个转换类ConvertVisibility.cs,继承于IValueConverter(记得添加引用using System.Windows.Data)
代码:
1
using
System;
2 using System . Windows;
3 using System . Windows . Data;
4
5 namespace VisibilityBinding
6 {
7 public class ConvertVisibility : IValueConverter
8 {
9 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 }
2 using System . Windows;
3 using System . Windows . Data;
4
5 namespace VisibilityBinding
6 {
7 public class ConvertVisibility : IValueConverter
8 {
9 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,用于绑定数据:
1
namespace
VisibilityBinding
2 {
3 public class itemdata
4 {
5 public string Name
6 { get ; set ; }
7 public string Score
8 { get ; set ; }
9 public bool Visibilitytype
10 { get ; set ; }
11 }
12 }
2 {
3 public class itemdata
4 {
5 public string Name
6 { get ; set ; }
7 public string Score
8 { get ; set ; }
9 public bool Visibilitytype
10 { get ; set ; }
11 }
12 }
然后我们回到MainPage.xaml,拖入个Listbox,并简单编辑下绑定模板
然后现在页面顶部添加引用
1
xmlns
:
Local
=
"
clr-namespace:VisibilityBinding
"
然后在页面里添加资源:
1
<Grid
.Resources
>
2 <Local:ConvertVisibility x:Key="dataconverter"/>
3 </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
}
}"
/>
然后设定数据绑定:
1
using
System
.
Collections
.
Generic;
2 using System . Windows;
3 using Microsoft . Phone . Controls;
4
5 namespace VisibilityBinding
6 {
7 public partial class MainPage : PhoneApplicationPage
8 {
9 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 }
2 using System . Windows;
3 using Microsoft . Phone . Controls;
4
5 namespace VisibilityBinding
6 {
7 public partial class MainPage : PhoneApplicationPage
8 {
9 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 }
运行看看效果:
其实真个很简单,关键是在转换类做对应的处理,即使输入不是bool型的,只要在转换类做对应的处理,返回Visibility.Collapsed或者Visibility.Visible就可以了
源码: