Как правило, скрытие элементов интерфейса может привести к странным ошибкам. Например, следующий код сгенерирует InvalidCastException
:
OptionsView view = new OptionsView();
Window window = view;
window.DataContext = new DifferentVM();
OptionsVM = view.DataContext;
Это несколько надуманный пример, но если вы когда-либо используете привязки WPF для установки объекта DataContext, то подобные сценарии весьма вероятны.
Я считаю, что лучше оставить свойство DataContext
таким, каким оно было разработано, и вместо этого дать моим представлениям конструктор, который принимает контекст данных более строго типизированным способом. В коде View у меня также есть свойство ViewModel соответствующего типа:
public OptionsView(OptionsVM viewModel)
{
DataContext = viewModel;
}
private OptionsVM ViewModel { get { return DataContext as OptionsVM; } }