WPF/NVVM - dwie zależne od siebie kontrolki

Cześć,
mam pytanie dotyczące prawidłowego podejścia do pewnego zagadnienia…
Mam dwie kontrolki, załóżmy że ComboBox oraz GroupBox, który domyślnie jest zablokowany (rodzaj kontrolek wybrałem tylko dla przykładu). W momencie wybrania elementu w ComboBox następuje odblokowanie GroupBox.

Efekt osiągnąłem na dwa sposoby i teraz zastanawiam się, który jest tym “jedynym słusznym” :slight_smile:
Piszę z palca, więc przepraszam za ewentualne literówki w kodzie.

Podejście 1
w widoku - w XAMLu - mam:

<ComboBox ItemsSource="{Binding Path=carsList}" SelectedItem="{Binding Path=CarSelection}"/>
<GroupBox x:Name="groupBoxCar" IsEnabled="{Binding Path=GroupBoxCarIsEnabled}">...</GroupBox>

W ViewModels mam plik MainWindowViewModel.cs, który implementuje INotifyPropertyChanged. Mam w nim dwie metody:

private string _carSelection;
public string CarSelection
{
	get { return _carSelection; }
	set
	{
		_carSelection = value;
		GroupBoxCarIsEnabled = true;
	}
}

private bool _groupBoxCarIsEnabled = false;
public bool GroupBoxCarIsEnabled
{
	get { return _groupBoxCarIsEnabled; }
	set
	{
		_groupBoxCarIsEnabled = value;
		OnPropertyChanged();
	}
}

W momencie wybrania dowolnego elementu w ComboBox wywołuje się CarSelection, który z kolei zmienia _groupBoxCarIsEnabled na “true”. Odpowiednia właściwość jest bindowana do IsEnabled w kontrolce GroupBox. O zmianach informuję za pomocą OnPropertyChanged.

Super, wszystko działa :slight_smile: Na obecny poziom mojej wiedzy jest to zgodne z MVVM :slight_smile:

Podejście 2
W widoku mam:

[ComboBox ItemsSource="{Binding Path=carsList}" SelectedItem="{Binding Path=CarSelection}"/]
[GroupBox x:Name="groupBoxCar" IsEnabled="false">...</GroupBox]

Różnica jest taka, że nie mam bindowania w kontrolce GroupBox.

W ViewModel mam:

MainWindow mainWindow = Application.Current.MainWindow as MainWindow;

private string _carSelection;
public string CarSelection
{
	get { return _carSelection; }
	set
	{
		_carSelection = value;
		mainWindow.groupBoxCar.IsEnabled = true;
	}
}

I też wszystko działa. Jest jednak mniej kodu - nie ma właściwości, która była bindowana w GroupBox.
Dobrałem się do kontrolki po jej nazwie i zmieniłem IsEnabled na true.
Wydaje mi się, że tutaj również wszystko jest zgodnie z MVVM.

…tak więc, które podejście jest lepsze? A może nie ma żadnej różnicy?