一、ItemsControl

先说ItemsControl这是一个只读控件,ItemsSourc属性用来获取或设置ItemsControl的数据源。可存放数组,List<T>等。

我们继续建立一个新的APP然后将原来的title 删了加一行。页面代码如下:

  1. <Grid Grid.Row="0" Margin="12">  
  2.     <ItemsControl Name="icTest" />  
  3. </Grid>  
  4. <Grid x:Name="ListBox1"  
  5.       Grid.Row="1"  
  6.       Margin="12">  
  7.     <ListBox>  
  8.         <ListBoxItem Content="香蕉" FontSize="40" />  
  9.         <ListBoxItem Content="苹果" FontSize="40" />  
  10.         <ListBoxItem Content="葡萄" FontSize="40" />  
  11.         <ListBoxItem Content="芒果" FontSize="40" />  
  12.         <ListBoxItem Content="榴莲" FontSize="40" />  
  13.         <ListBoxItem Content="草莓" FontSize="40" />  
  14.     </ListBox>  
  15. </Grid>  
  16. <Grid x:Name="ListBox2"  
  17.       Grid.Row="2"  
  18.       Margin="12">  
  19.     <ListBox Name="lb2" />  
  20. </Grid>  
        <Grid Grid.Row="0" Margin="12">
            <ItemsControl Name="icTest" />
        </Grid>
        <Grid x:Name="ListBox1"
              Grid.Row="1"
              Margin="12">
            <ListBox>
                <ListBoxItem Content="香蕉" FontSize="40" />
                <ListBoxItem Content="苹果" FontSize="40" />
                <ListBoxItem Content="葡萄" FontSize="40" />
                <ListBoxItem Content="芒果" FontSize="40" />
                <ListBoxItem Content="榴莲" FontSize="40" />
                <ListBoxItem Content="草莓" FontSize="40" />
            </ListBox>
        </Grid>
        <Grid x:Name="ListBox2"
              Grid.Row="2"
              Margin="12">
            <ListBox Name="lb2" />
        </Grid>

对三行中分别加入 ItemsControl 和两个 ListBox

 

填充输数据代码如下:

 

  1. public MainPage()  
  2. {  
  3.     InitializeComponent();  
  4.     List<string> itemData = new List<string>();  
  5.     itemData.Add("萝卜");  
  6.     itemData.Add("白菜");  
  7.     itemData.Add("各有所爱");  
  8.     this.icTest.ItemsSource = itemData;  
  9.     this.icTest.FontSize = 40;  
  10.   
  11.     List<string> listData = new List<string>();  
  12.     listData.Add("猪肉");  
  13.     listData.Add("牛肉");  
  14.     listData.Add("鱼肉");  
  15.     listData.Add("牛蛙");  
  16.     listData.Add("鳝鱼");  
  17.     listData.Add("烤鸡");  
  18.     this.lb2.ItemsSource = listData;  
  19.     this.lb2.FontSize = 40;  
  20.     // Sample code to localize the ApplicationBar   
  21.     //BuildLocalizedApplicationBar();   
  22. }  

 

        public MainPage()
        {
            InitializeComponent();
            List<string> itemData = new List<string>();
            itemData.Add("萝卜");
            itemData.Add("白菜");
            itemData.Add("各有所爱");
            this.icTest.ItemsSource = itemData;
            this.icTest.FontSize = 40;

            List<string> listData = new List<string>();
            listData.Add("猪肉");
            listData.Add("牛肉");
            listData.Add("鱼肉");
            listData.Add("牛蛙");
            listData.Add("鳝鱼");
            listData.Add("烤鸡");
            this.lb2.ItemsSource = listData;
            this.lb2.FontSize = 40;
            // Sample code to localize the ApplicationBar
            //BuildLocalizedApplicationBar();
        }

然后运行模拟器。

 

 

效果如图:

 

 

OK 我们可以看到我们加入的数据都显示出来,最后ItemsControl 和ListBox 区别在于 ListBox 可以选中。二ItemsControl是只读的。

 

WPF ItemsControl 手动刷新

 

 

 

遇到这样一个问题,

我的ItemsSource是绑定到一个ObservableCollection<T>类型的实力上去的。

但是T类型没有实现INotifyPropertyChanged接口,因为那是一个第三方库里的东西,我也不想在为它做一个适配器。

所以会遇到一些问题。在ItemsControl添加项和删除项的时候是没有问题的,但是在修改项的时候,就发现UI没有更新。因为T类型没有相应的通知。

 

解决方案是刷新一下Items

实例:

this.listBox.Items.Refresh();