制作可由其他视图访问的通用UserControl

时间:2013-10-05 11:58:43

标签: c# wpf mvvm user-controls mvvm-foundation

我有下面给出的UserControl A有两个单选按钮。 此UserControl视图具有ViewModel。

问题: 我再次有两个视图创建和编辑。 我想在Create / Edit中使用上面提到的UserControl,要求我可以根据Create / Edit View中的要求将radiobuttons或UserControl中的任何元素设置为Visible或Hidden。

例如:创建可能不需要单选按钮1和2.因此只能显示矩形。 无论我在列表或文本框中输入什么,都必须在UserControl的ViewModel中更新,点击按钮后的搜索结果必须相应地发送到创建/编辑。 注意:Create / Edit有自己的ViewModels.Please建议哪种方法最好考虑MVVM

控件必须放在灰色区域,如“创建/编辑视图”矩形所示

Search Control

Create,Edit

2 个答案:

答案 0 :(得分:0)

UserControl由一些抽象的BaseViewModel驱动可能是个好主意。然后创建两个子类EditViewModelCreateViewModel,然后根据上下文使用它们。

单选按钮的快速粗略示例:

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;
  }
}

答案 1 :(得分:0)

您可以在UserControl中创建DependancyProperty,如

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


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

并在UserControl的xaml内部设置radiobutton的可见性,如

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

并在主视图(创建/编辑)中执行此操作

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

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

并且不要忘记给UserControl的父Grid提供名称“LayoutRoot”

<Grid x:Name="LayoutRoot"/>