C# 创建可由其他视图访问的通用UserControl

C# 创建可由其他视图访问的通用UserControl,c#,wpf,mvvm,user-controls,mvvm-foundation,C#,Wpf,Mvvm,User Controls,Mvvm Foundation,我有一个用户控件,下面有两个单选按钮。 此UserControl视图具有其ViewModel 问题: 我有两个视图创建和编辑。 我想在Create/Edit中使用上面提到的UserControl,要求我可以根据Create/Edit视图中的要求使单选按钮或UserControl中的任何元素可见或隐藏 创建可能不需要单选按钮1和2。所以只能显示矩形。 无论我在列表或文本框中输入什么,都必须在UserControl的ViewModel中更新,并且单击按钮后的搜索结果必须发送到相应的创建/编辑。 注意

我有一个用户控件,下面有两个单选按钮。 此UserControl视图具有其ViewModel

问题: 我有两个视图创建和编辑。 我想在Create/Edit中使用上面提到的UserControl,要求我可以根据Create/Edit视图中的要求使单选按钮或UserControl中的任何元素可见或隐藏

创建可能不需要单选按钮1和2。所以只能显示矩形。 无论我在列表或文本框中输入什么,都必须在UserControl的ViewModel中更新,并且单击按钮后的搜索结果必须发送到相应的创建/编辑。 注意:创建/编辑他们自己的视图模型。请建议哪种方法最适合考虑MVVM

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


最好让
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;
  }
}

您可以在UserControl中创建DependencyProperty,如

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中设置radiobutton的可见性,如下所示

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

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

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


别忘了给UserControl的父网格命名为“LayoutRoot”


感谢您提供的信息…补充上述问题..我希望应用程序中的视图能够使用上述控件,而无需重复使用代码..此控件将用作通用控件
<MyUserControl x:Name="Create" RadioButtonVisibility="Hidden"/>
<Grid x:Name="LayoutRoot"/>