[英]c# MVVM: How to bind 2 ContentControls to 2 Properties of MainViewModel
我正在做一個日常任務管理器。
我想在我的 MainWindow.xaml 中的 2 個不同的 ContentControls 內顯示 2 個不同的視圖。 我有一個 ViewModelMain,它包含兩個 ViewModelBase 類型的屬性。 所以我可以在不同的ViewModel之間切換,因為它們都實現了ViewModelBase,它實現了INotifyPropertyChanged。 只需一個 ContentControl,選擇任何視圖都沒有問題。 事實上,有可能(在命令中配置時)select 來自第二個 ContentControl 的視圖模型正確。
現在我需要幫助...為什么我的第二個 ContentControl 沒有顯示任何內容? 我試圖評估問題出在哪里,但是 ViewModel 選擇按預期傳遞,並且調用了 OnPropertyChanged 方法。
謝謝你的幫助。
我的 ViewModelMain:
public class ViewModelMain : ViewModelBase {
private ViewModelBase selectedVMMain;
private ViewModelBase selectedVMEssentail;
public ViewModelBase SelectedVMMain {
get { return selectedVMMain; }
set {
if( selectedVMMain != value ) {
selectedVMMain = value;
OnPropertyChanged(nameof(selectedVMMain));
}
}
}
public ViewModelBase SelectedVMEssential {
get { return selectedVMEssentail; }
set {
if( selectedVMEssentail != value ) {
selectedVMEssentail = value;
OnPropertyChanged(nameof(selectedVMEssentail));
}
}
}
public ICommand CommandUpdateView { get; set; }
public ViewModelMain() {
this.CommandUpdateView = new CommandUpdateView(this);
}
}
命令更新視圖:
private ViewModelMain viewModelMain;
public event EventHandler CanExecuteChanged;
public CommandUpdateView( ViewModelMain _viewModelMain) {
this.viewModelMain = _viewModelMain;
}
public bool CanExecute( object parameter ) => true;
public void Execute( object parameter ) {
switch( parameter ) {
case nameof(EnumViewModels.Übersicht):
viewModelMain.SelectedVMMain = new ViewModelÜbersicht();
break;
case nameof(EnumViewModels.Statistik):
viewModelMain.SelectedVMMain = new ViewModelStatistik();
break;
case nameof(EnumViewModels.Kategorie):
viewModelMain.SelectedVMEssential = new ViewModelKategorie();
break;
case nameof(EnumViewModels.Projekt):
viewModelMain.SelectedVMEssential = new ViewModelProjekt();
break;
case nameof(EnumViewModels.Aufgabe):
viewModelMain.SelectedVMEssential = new ViewModelAufgabe();
break;
case nameof(EnumViewModels.Pomodoro):
viewModelMain.SelectedVMEssential = new ViewModelPomodoro();
break;
default:
viewModelMain.SelectedVMMain = new ViewModelTEST();
viewModelMain.SelectedVMEssential = new ViewModelTEST();
break;
}
}
}
MainWindow.xaml(DataContext 設置為新的 ViewModelMain)
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition MinWidth="100" Width="Auto"/>
<ColumnDefinition MinWidth="200" Width="Auto"/>
<ColumnDefinition MinWidth="200" Width="Auto"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top"
Grid.Column="0" Grid.Row="0"
Margin="5" Width="100" >
<Button x:Name="Button_Uebersicht" Content="Übersicht"
Command="{Binding CommandUpdateView}" CommandParameter="Übersicht"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
<Button x:Name="Button_Statistik" Content="Statistik"
Command="{Binding CommandUpdateView}" CommandParameter="Statistik"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
<Button x:Name="Button_Kategorie" Content="Kategorie"
Command="{Binding CommandUpdateView}" CommandParameter="Kategorie"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
<Button x:Name="Button_Projekt" Content="Projekt"
Command="{Binding CommandUpdateView}" CommandParameter="Projekt"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
<Button x:Name="Button_Aufgabe" Content="Aufgabe"
Command="{Binding CommandUpdateView}" CommandParameter="Aufgabe"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
<Button x:Name="Button_Pomodoro" Content="Pomodoro"
Command="{Binding CommandUpdateView}" CommandParameter="Pomodoro"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
<Button x:Name="Button_TEST" Content="TEST"
Command="{Binding CommandUpdateView}"
HorizontalAlignment="Stretch" VerticalAlignment="Center"
Margin="0,5" />
</StackPanel>
<ContentControl x:Name="CC_Main"
Content="{Binding SelectedVMMain}"
Grid.Column="1" Grid.Row="0"
Margin="5" Width="Auto"/>
<ContentControl x:Name="CC_Essential"
Content="{Binding SelectedVMEssential}"
Grid.Column="2" Grid.Row="0"
Margin="5" Width="Auto"/>
解決了
是字段,拼寫錯誤...屬性命名正確,但綁定不起作用,因為我使用了 nameof(field) 關鍵字...
感謝 Stack Overflow 上的精彩介紹!!!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.