Создание универсального UserControl, к которому может обращаться другой вид

У меня есть UserControl A, приведенный ниже с двумя кнопками радио. Это представление UserControl имеет свою ViewModel.

Вопрос: У меня снова есть два представления: Создать и Изменить. Я хочу использовать вышеупомянутый UserControl в Create/Edit с требованием, чтобы я мог сделать радиокнопки или любой из элементов в UserControl видимыми или скрытыми в соответствии с требованием в представлении Create/Edit.

Например: Создать Может не требовать переключателей 1 и 2. Поэтому должен отображаться только прямоугольник. Любые входные данные, которые я предоставляю в списке или текстовом поле, должны быть обновлены в ViewModel UserControl, и результат поиска после нажатия кнопки должен быть соответствующим образом отправлен в Create/Edit. Примечание:Create/Edit имеют свои собственные ViewModels. Пожалуйста, предложите, какой подход лучше всего подходит для MVVM

Элемент управления должен быть помещен в выделенную серым цветом область, как показано в прямоугольнике для представления "Создание / редактирование".

Управление поиском

Создание, редактирование

2 ответа

Решение

Вы можете создать DependancyProperty внутри вашего UserControl, как

public static readonly DependencyProperty RadioButtonVisibilityProperty= 
 DependencyProperty.Register( "RadioButtonVisibility", typeof(Visibility),
 typeof(MyUserControl));


public Visibility RadioButtonVisibility 
{
    get { return (Visibility)GetValue(RadioButtonVisibilityProperty); }
    set { SetValue(RadioButtonVisibilityProperty, value); }
}

и внутри xaml вашего UserControl Установите видимость радиокнопки как

<RadioButton Visibility="{Binding Parent.RadioButtonVisibility,ElementName=LayoutRoot}"/>

и в вашем основном представлении (создать / редактировать) сделать так

<MyUserControl x:Name="Edit" RadioButtonVisibility="Visible"/> 

или же

<MyUserControl x:Name="Create" RadioButtonVisibility="Hidden"/>

И не забудьте дать родительской Grid вашей UserControl имя "LayoutRoot"

лайк

<Grid x:Name="LayoutRoot"/>

Это может быть хорошей идеей иметь UserControl руководствоваться какой-то абстрактной BaseViewModel, Затем вы создаете два подкласса EditViewModel а также CreateViewModel который вы затем используете на основе контекста.

Быстрый грубый пример для радио кнопок:

public abstract class BaseViewModel
{
  public bool ShowRadioButtons { get; protected set; }
}

public class EditViewModel : BaseViewModel
{
  public EditViewModel()
  {
    ShowRadioButtons = true;
  }
}

public class CreateViewModel : BaseViewModel
{
  public CreateViewModel()
  {
    ShowRadioButtons = false;
  }
}
Другие вопросы по тегам