同步绑定到同一集合和同一选定项目的两个组合框
Synchronizing two comboboxes bound to the same collection and to the same selected item
我有两个组合框来表示客户代码和客户名称。两者都绑定到相同的对象集合和相同的 SelectedItem
。我想在 select 客户代码时更新客户名称,反之亦然。
我正在使用 C# 和 MVVM 模式。我已经尝试了 SelectedItem
和 SelectedValue
与 selectedvaluepath 的所有组合,但似乎没有任何效果。
这是我的两个组合框:
<ComboBox Name="CmbStockUnitCustomerCode" ItemsSource="{Binding CustomerCodeDtos}"
DisplayMemberPath="Code" SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True"></ComboBox>
<ComboBox Name="CmbStockUnitCustomerName" ItemsSource="{Binding CustomerCodeDtos}"
DisplayMemberPath="Name" SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True"></ComboBox>
这些是绑定对象:
public CustomerDto SelectedCustomer
{
get => _selectedcustomer;
set
{
_selectedcustomer = value;
RaisePropertyChanged("SelectedCustomer");
}
}
public class CustomerDto
{
public short Code { get; set; }
public string Name { get; set; }
public CustomerDto(short code, string name)
{
this.Code = code;
this.Name = name;
}
}
public ObservableCollection<CustomerDto> CustomerCodeDtos
{
get => _databaseService.GetAllCustomers();
}
当我更新其中一个组合框时,我希望另一个组合框更新为对象 CustomerDto 中的相应值,但没有任何反应。
您每次引用集合时都在重新创建集合,因此 SelectedItem 引用了不同的对象。实际上,您的两个组合框使用不同的集合作为 ItemsSources。将代码更改为
public ObservableCollection<CustomerDto> CustomerCodeDtos
{
get
{
if(_customerCodes==null)
{
_customerCodes = _databaseService.GetAllCustomers();
}
return _customerCodes;
}
}
我有两个组合框来表示客户代码和客户名称。两者都绑定到相同的对象集合和相同的 SelectedItem
。我想在 select 客户代码时更新客户名称,反之亦然。
我正在使用 C# 和 MVVM 模式。我已经尝试了 SelectedItem
和 SelectedValue
与 selectedvaluepath 的所有组合,但似乎没有任何效果。
这是我的两个组合框:
<ComboBox Name="CmbStockUnitCustomerCode" ItemsSource="{Binding CustomerCodeDtos}"
DisplayMemberPath="Code" SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True"></ComboBox>
<ComboBox Name="CmbStockUnitCustomerName" ItemsSource="{Binding CustomerCodeDtos}"
DisplayMemberPath="Name" SelectedItem="{Binding SelectedCustomer, Mode=TwoWay}"
IsSynchronizedWithCurrentItem="True"></ComboBox>
这些是绑定对象:
public CustomerDto SelectedCustomer
{
get => _selectedcustomer;
set
{
_selectedcustomer = value;
RaisePropertyChanged("SelectedCustomer");
}
}
public class CustomerDto
{
public short Code { get; set; }
public string Name { get; set; }
public CustomerDto(short code, string name)
{
this.Code = code;
this.Name = name;
}
}
public ObservableCollection<CustomerDto> CustomerCodeDtos
{
get => _databaseService.GetAllCustomers();
}
当我更新其中一个组合框时,我希望另一个组合框更新为对象 CustomerDto 中的相应值,但没有任何反应。
您每次引用集合时都在重新创建集合,因此 SelectedItem 引用了不同的对象。实际上,您的两个组合框使用不同的集合作为 ItemsSources。将代码更改为
public ObservableCollection<CustomerDto> CustomerCodeDtos
{
get
{
if(_customerCodes==null)
{
_customerCodes = _databaseService.GetAllCustomers();
}
return _customerCodes;
}
}