一、ItemsControl
先说ItemsControl这是一个只读控件,ItemsSourc属性用来获取或设置ItemsControl的数据源。可存放数组,List<T>等。
我们继续建立一个新的APP然后将原来的title 删了加一行。页面代码如下:
- <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>
<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
填充输数据代码如下:
- 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();
- }
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();