更好的方法是将控件绑定到视图模型并在那里集成逻辑。请参阅:Explain Combo Box Binding In MVVM - WPF。
作为示例,我们创建一个用于编辑人员数据的窗口。它包含一个组合框,用户可以在其中选择一个城市。 When a certain city is selected, a button is is displayed, otherwise it is hidden.
你可以有一个看起来像这样的视图模型
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)。请注意,当所选城市发生变化时,我们还会为 MyButtonVisibility 引发 PropertyChanged 事件,以告诉 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 绑定的魔力,现在当您选择城市时,按钮会自动出现或消失。