Лучший подход - привязать элементы управления к модели представления и интегрировать там логику.См .: Объяснение привязки поля со списком в MVVM - WPF .
В качестве примера мы создаем окно для редактирования данных о человеке.Он содержит поле со списком, где пользователь может выбрать город.Когда выбран определенный город, отображается кнопка, в противном случае она скрыта.
У вас может быть модель вида, подобная этой
public class PersonViewModel: INotifyPropertyChanged
{
private string _city;
public string City
{
get { return _city; }
set {
if (value != _city) {
_city = value;
OnPropertyChanged(nameof(City));
OnPropertyChanged(nameof(MyButtonVisibility));
}
}
}
public List<string> Cities { get; } = new List<string> { "Austin", "Boston", "Chicago"};
public Visibility MyButtonVisibility => City == "Boston"
? Visibility.Visible
: Visibility.Hidden;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
// Other properties
private string _firstName;
public string FirstName
{
get { return _firstName; }
set {
if (value != _firstName) {
_firstName = value;
OnPropertyChanged(nameof(FirstName));
}
}
}
private string _lastName;
public string LastName
{
get { return _lastName; }
set {
if (value != _lastName) {
_lastName = value;
OnPropertyChanged(nameof(LastName));
}
}
}
}
Обратите внимание, что она реализует INotifyPropertyChanged
.Он имеет коллекцию Cities
, используемую для отображения элементов списка, и свойство City
для выбранного города.
Нам также необходимо свойство для видимости кнопки (MyButtonVisibility
).Обратите внимание, что при изменении выбранного города мы также вызываем событие PropertyChanged
для MyButtonVisibility
, чтобы сообщить WPF запросить видимость кнопки.
В конструкторе окна мы назначаем модель представления:
public MainWindow()
{
InitializeComponent();
DataContext = new PersonViewModel();
}
XAML-код для выпадающего списка:
<ComboBox x:Name="citiesComboBox" HorizontalAlignment="Left" Margin="116,96,0,0"
VerticalAlignment="Top" Width="120"
ItemsSource="{Binding Path=Cities}"
SelectedItem="{Binding Path=City}"
/>
XAML-код для кнопки:
<Button Content="Button" HorizontalAlignment="Left" Margin="116,164,0,0"
VerticalAlignment="Top" Width="75"
Visibility="{Binding MyButtonVisibility}"
/>
С помощью магии привязки WPF теперь кнопка появляется или исчезает автоматически, когда вы выбираете города.