C# WPF 绑定到数据源的控件无法更新(显示空白)的解决办法

首先回顾一下在 WPF 中将控件进行数据绑定的写法。
例如,要将一个两列的 ListBox 进行数据绑定,在 XAML 中,该 ListBox 的 XAML 代码大致为

<ListBox Name="EmployeeList" HorizontalContentAlignment="Stretch">
	<ListBox.ItemTemplate>
		<DataTemplate>
			<Grid>
				<
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是用C#代码实现WPF中实现不同页面相同ComboBox控件绑定数据源数据的同步的方法: 1. 首先,创建一个ViewModel类,并在其中定义ComboBox的数据源和选中项属性,同时实现INotifyPropertyChanged接口,如下所示: ``` public class MyViewModel : INotifyPropertyChanged { private ObservableCollection<string> _itemsSource; private string _selectedItem; public ObservableCollection<string> ItemsSource { get { return _itemsSource; } set { _itemsSource = value; OnPropertyChanged("ItemsSource"); } } public string SelectedItem { get { return _selectedItem; } set { _selectedItem = value; OnPropertyChanged("SelectedItem"); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 2. 在每个页面的代码中,创建一个MyViewModel实例,并将ComboBox的ItemsSource和SelectedValue属性分别绑定到ViewModel中对应的属性,如下所示: ``` public partial class Page1 : Page { private MyViewModel _viewModel; public Page1() { InitializeComponent(); _viewModel = MyViewModel.Instance; comboBox1.ItemsSource = _viewModel.ItemsSource; comboBox1.SetBinding(ComboBox.SelectedValueProperty, new Binding("SelectedItem") { Mode = BindingMode.TwoWay }); } } public partial class Page2 : Page { private MyViewModel _viewModel; public Page2() { InitializeComponent(); _viewModel = MyViewModel.Instance; comboBox1.ItemsSource = _viewModel.ItemsSource; comboBox1.SetBinding(ComboBox.SelectedValueProperty, new Binding("SelectedItem") { Mode = BindingMode.TwoWay }); } } ``` 3. 在MyViewModel类中使用Singleton模式创建一个实例,确保所有页面使用的是同一个ViewModel对象,如下所示: ``` public class MyViewModel : INotifyPropertyChanged { private static MyViewModel _instance; private ObservableCollection<string> _itemsSource; private string _selectedItem; public static MyViewModel Instance { get { if (_instance == null) { _instance = new MyViewModel(); } return _instance; } } public ObservableCollection<string> ItemsSource { get { return _itemsSource; } set { _itemsSource = value; OnPropertyChanged("ItemsSource"); } } public string SelectedItem { get { return _selectedItem; } set { _selectedItem = value; OnPropertyChanged("SelectedItem"); } } public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); } } ``` 这样就可以在不同页面中实现ComboBox控件绑定数据源数据的同步了。需要注意的是,要确保ViewModel的生命周期和页面的生命周期一致,否则可能会出现数据同步不成功的情况。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值