У меня есть форма с некоторыми полями и двумя полями со списком. Моя модель представления содержит несколько экземпляров класса User
, который содержит атрибуты name
и profile
.
ViewModel
public class UserViewModel: INotifyPropertyChanged
{
private ObservableCollection<User> usersList = new ObservableCollection<User>();
private User selectedUser = new User();
private User newUser = new User();
public UserViewModel()
{
}
public ObservableCollection<User> UsersList
{
get
{
return this.usersList;
}
set
{
this.usersList = value;
this.OnPropertyChanged();
}
}
public User SelectedUser
{
get
{
return this.selectedUser;
}
set
{
this.selectedUser = value;
this.OnPropertyChanged();
}
}
public User NewUser
{
get
{
return this.newUser;
}
set
{
this.newUser = value;
this.OnPropertyChanged();
}
}
private void OnPropertyChanged([CallerMemberName] string propertyName = "")
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
}
Код-за
this.userViewModel = new UserViewModel();
this.DataContext = this.userViewModel;
XAML
<-- The DataContext for this ComboBox is the entire UserViewModel -->
<ComboBox
Height="Auto"
Width="Auto"
IsEditable="True"
IsTextSearchCaseSensitive="False"
SelectedItem="SelectedUser">
<ComboBoxItem Content="Mary" IsSelected="True"></ComboBoxItem>
<ComboBoxItem Content="John"></ComboBoxItem>
</ComboBox>
Если я выбираю пользователя из первого списка, все поля формы заполняются существующими данными. Независимо от выбранного пользователя, он будет сохранен в SelectedUser
через свойство SelectedItem.
<Grid>
<Grid.DataContext>
<PriorityBinding>
<Binding Path="SelectedUser" Converter="{StaticResource NullToDependencyPropertyUnsetConverter}" />
<Binding Path="NewUser" />
</PriorityBinding>
</Grid.DataContext>
[...]
<-- The DataContext for this ComboBox will be SelectedUser or NewUser, depending on the case -->
<ComboBox
Name="profileComboBox"
Height="Auto"
Width="Auto"
IsEditable="True"
IsTextSearchCaseSensitive="False"
SelectedItem="Profile">
<ComboBoxItem Content="User" IsSelected="True"></ComboBoxItem>
<ComboBoxItem Content="Admin"></ComboBoxItem>
</ComboBox>
[...]
</Grid>
ComboBox будет иметь SelectedUser
или NewUser
в качестве DataContext в зависимости от того, является ли SelectedUser
нулевым или нет. Затем, какой бы профиль я ни выбрал, он будет сохранен в атрибуте Profile
ранее выбранного пользователя через свойство SelectedItem.
Моя проблема в том, что второй выпадающий список должен автоматически выбирать соответствующий профиль («Пользователь» или «Администратор») пользователя, только что выбранного в первом выпадающем списке. Может ли это быть достигнуто только с использованием XAML?