GitHub的链接:https://github.com/babakin34/wpf_test/tree/master/WpfApp1绑定同一收集到的ComboBox和DataGrid
我有以下类别:
的ViewModels:
public class PersonVM : BindableBase
{
public int ID { get; set; }
private string _lastName;
public string LastName
{
get { return _lastName; }
set { SetProperty(ref _lastName, value); }
}
}
public class MainVM : BindableBase
{
public ObservableCollection<PersonVM> People { get; set; }
private PersonVM _selectedPerson;
public PersonVM SelectedPerson
{
get { return _selectedPerson; }
set { SetProperty(ref _selectedPerson, value); }
}
public MainVM()
{
People = new ObservableCollection<PersonVM>()
{
new PersonVM()
{
ID = 1,
LastName = "AA"
},
new PersonVM()
{
ID = 2,
LastName = "BB"
},
};
SelectedPerson = People.First();
}
}
VIEW:
<Grid>
<StackPanel>
<ComboBox ItemsSource="{Binding People}"
SelectedItem="{Binding SelectedPerson}"
DisplayMemberPath="LastName"
Margin="0,5,0,25"/>
<DataGrid ItemsSource="{Binding People}"/>
</StackPanel>
</Grid>
我怎样才能做到这一点从ComboBox中“MainVM.SelectedPerson”当用户选择了空元素,这是由DataGrid的默认最后一个条目引起的通知?
PS:我使用棱镜,但问题不是棱镜相关。你可以用INotifyPropertyChanged替换BindableBase。
您应该将“SelectedItem =”{Binding SelectedPerson}“''添加到DataGrid中 –
您可以将DataGrid的CanUserAddRows属性设置为false以删除最后一个空行。这不是一个可以在ComboBox中选择的实际PersonVM,而是一个用于将新项目添加到DataGrid的占位符... – mm8
@ mm8:我需要DataGrid的最后一行,以便用户可以添加新条目。 –