我是WPF MVVM的新手。我有MainWindow.xaml这里Grid分为两列。 Column1与MenuUserControl.xaml挂钩,它有两个名为Page1和Page2的按钮。 Column2与ContentControl挂钩,用于根据MenuUserControl.xaml中的按钮单击显示视图。单击Page1按钮时,其背景颜色应更改为蓝色,然后单击Page2按钮时,其背景颜色应更改为蓝色,Page1背景颜色应更改为正常。如何在XAML中实现这一目标?
答案 0 :(得分:0)
假设浅蓝色是可以接受的,那么这是一个解决方案。
MainWindow有一个用于选择视图的列表框和一个用于显示页面的框架。我通常会使用contentcontrol和usercontrols而不是框架和页面,但是......
<Window.DataContext>
<local:MainWindowViewModel/>
</Window.DataContext>
<Window.Resources>
<DataTemplate DataType="{x:Type local:Page1ViewModel}">
<local:Page1/>
</DataTemplate>
<DataTemplate DataType="{x:Type local:Page2ViewModel}">
<local:Page2/>
</DataTemplate>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="120"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<ListBox Name="ViewSelect"
ItemsSource="{Binding ViewChoices}"
SelectedItem="{Binding SelectedViewChoice, Mode=TwoWay}"
>
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
<Frame Grid.Column="1"
Content="{Binding SelectedViewChoice.VM}"
NavigationUIVisibility="Hidden"
/>
</Grid>
ViewChoices是ViewChoice的集合,您选择的任何一个都将是SelectedViewChoice。 VM属性是视图模型的一个实例,它最终由帧呈现。将其模板化到相关视图中。
MainWindowViewModel:
public class MainWindowViewModel : INotifyPropertyChanged
{
public ObservableCollection<ViewChoice> ViewChoices { get; set; }
= new ObservableCollection<ViewChoice>
{
new ViewChoice{ Name="Page One", VM=new Page1ViewModel()},
new ViewChoice{ Name="Page Two", VM=new Page2ViewModel()},
};
private ViewChoice selectedViewChoice;
public ViewChoice SelectedViewChoice
{
get { return selectedViewChoice; }
set { selectedViewChoice = value; RaisePropertyChanged(); }
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged([CallerMemberName] String propertyName = "")
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
ViewChoice:
public class ViewChoice
{
public string Name { get; set; }
public object VM { get; set; }
}