Фон: У меня есть окно с элементом управления вкладкой с каждой вкладкой, имеющей отдельный UserControl. Я следил за MVVM для каждого пользовательского элемента управления и MEF для получения элементов управления, которые будут отображаться на вкладке во время выполнения. Это моя реализацияВнедрение интерфейсов в View и ViewModels с использованием MEF и MVVM
interface ITabControl
{
}
[Export(typeof(UserControl1ViewModel))]
class UserControl1ViewModel
{
}
class UserControl1: ITabControl
{
[Import(typeof(UserControl1ViewModel))]
public UserControl1ViewModel ViewModel
{
get { return this.DataContext as UserControl1ViewModel; }
set { this.DataContext = value; }
}
}
//Other user controls have similar implementation
public class WindowViewModel
{
//Import all type of ITabControl and set the TabCollection(bound to ItemSource property of tab control)
}
Проблема: Теперь у меня есть некоторая валидация быть сделана на определенный наборе вкладок на основе действий пользователя в главном окне. Поэтому я использовал другой интерфейс под названием IConfiguration, который реализован пользовательский контроль ViewModels.
interface IConfiguration
{
public void Action1();
public void Action2();
------------------- (many more)
}
public class Window
{
//Import all type of IConfiguration and call Action1/Action2 for all these types based on user actions.
}
Теперь, если возникает ошибка во время проверки (IConfigure действия impelemented в различных ViewModels) в любом из перечисленных выше вкладок, мне нужно, чтобы установить SelectedTabItem свойство элемента управления вкладки для этой конкретной вкладки. Поскольку эти действия реализованы в ViewModel, я не могу получить UserControl для установки свойства SelectedTabItem. Как мне это достичь?
PS: Я знаю, что могу достичь этого путем внедрения IConfiguration ввиду UserControl вместо ViewModel таким образом
public class UserControl1 : IConfiguration
{
public void Action1
{
this.ViewModel.Action1();
}
public void Action2
{
this.ViewModel.Action2();
}
//--------
}
Интересно, если есть лучший способ для достижения этой цели.