我有下面给出的UserControl A有两个单选按钮。 此UserControl视图具有ViewModel。
问题: 我再次有两个视图创建和编辑。 我想在Create / Edit中使用上面提到的UserControl,要求我可以根据Create / Edit View中的要求将radiobuttons或UserControl中的任何元素设置为Visible或Hidden。
例如:创建可能不需要单选按钮1和2.因此只能显示矩形。 无论我在列表或文本框中输入什么,都必须在UserControl的ViewModel中更新,点击按钮后的搜索结果必须相应地发送到创建/编辑。 注意:Create / Edit有自己的ViewModels.Please建议哪种方法最好考虑MVVM
控件必须放在灰色区域,如“创建/编辑视图”矩形所示
答案 0 :(得分:0)
让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;
}
}
答案 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"/>