WPF使用BindingList/ObservableCollection实现数据绑定同步刷新
想必这个问题做过WPF开发的程序员几乎都遇到吧?自从注册了博客园五个月以来,一直都是扮演的浏览者角色。我觉得技术人员应该具有爱分享的品质,同时写博文也是对自己技术的一种锤炼,所以开始总结一些遇到的问题,希望对一些遇到同样难题困扰的朋友们有些帮助或者是启示。这是我发表在博客园的第一篇博文,疏忽纰漏支出还希望大家给予指出。
<Window x:Class="数据绑定同步刷新.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded_1">
<Grid>
<ListBox Background="Transparent" ItemsSource="{Binding}"
Name="lbxMarineFiles" Margin="0,0,179,145">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="5,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Stroke="#C1C1C1"
StrokeThickness="1"
Width="6"
VerticalAlignment="Center"
Height="6"
Fill="#DDFF82"/>
<TextBlock Text="{Binding Note}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Button Content="Button" HorizontalAlignment="Left" Margin="418,80,0,0" VerticalAlignment="Top" Width="75" Click="Button_Click_1"/>
<ListBox HorizontalAlignment="Right" Height="140" Margin="0,180,179,0" ItemsSource="{Binding}"
Name="lbxBindList"
VerticalAlignment="Top" Width="338">
<ListBox.ItemTemplate>
<DataTemplate>
<Border Margin="5,0">
<StackPanel Orientation="Horizontal" VerticalAlignment="Center">
<Ellipse Stroke="#C1C1C1"
StrokeThickness="1"
Width="6"
VerticalAlignment="Center"
Height="6"
Fill="#DDFF82"/>
<TextBlock Text="{Binding Note}"
VerticalAlignment="Center"/>
</StackPanel>
</Border>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.ComponentModel;
using System.Collections.ObjectModel;
namespace 数据绑定同步刷新
{
/// <summary>
/// MainWindow.xaml 的交互逻辑
/// </summary>
public partial class MainWindow : Window
{
ObservableCollection<Notes> liData = new ObservableCollection<Notes>();
BindingList<Notes> biData = new BindingList<Notes>();
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded_1(object sender, RoutedEventArgs e)
{
liData.Add(new Notes("id"));
biData.Add(new Notes("hi"));
this.lbxMarineFiles.ItemsSource = liData;
this.lbxBindList.ItemsSource = biData;
}
private void Button_Click_1(object sender, RoutedEventArgs e)
{
liData.Add(new Notes("id1"));
biData.Add(new Notes("hi1"));
}
}
public class Notes
{
private string note;
public string Note
{
get { return note; }
set { note = value; }
}
public Notes(String filed)
{
this.note = filed;
}
}
}
总结:使用BindingList或者ObservableCollection作为数据源时,只需要与Control绑定一次就够了。数据源改变后,界面会同步刷新显示最新数据。原因是它们两个实现了INotifyCollectionChanged接口,具有了本身状态改变时通知客户端的能力。

浙公网安备 33010602011771号