Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用参数WPF打开UserControl_C#_Wpf_Xaml_Mvvm - Fatal编程技术网

C# 使用参数WPF打开UserControl

C# 使用参数WPF打开UserControl,c#,wpf,xaml,mvvm,C#,Wpf,Xaml,Mvvm,我正在使用Galasoft MVVM灯光。我将一个窗口与多个用户控件一起使用,我通过更改其可见性在用户控件与事件之间切换。我想在向其传递参数时显示一个UserControl。如果使用相同的ViewModel传递参数将很容易,但我听说这不是一个好做法 我可以使用MessengerInstance在ViewModels之间传递数据,但是这不是一个事件,因此新的ViewModel在发送消息时不会收到通知,因此不知道何时查找消息 这是我实例化新视图的地方: <Grid Visibility="{B

我正在使用Galasoft MVVM灯光。我将一个窗口与多个
用户控件
一起使用,我通过更改其
可见性
用户控件
与事件之间切换。我想在向其传递参数时显示一个
UserControl
。如果使用相同的
ViewModel
传递参数将很容易,但我听说这不是一个好做法

我可以使用
MessengerInstance
ViewModels
之间传递数据,但是这不是一个事件,因此新的
ViewModel
在发送消息时不会收到通知,因此不知道何时查找消息

这是我实例化新视图的地方:

<Grid Visibility="{Binding ShowDetail, Converter={StaticResource BoolVisConverter}}" Grid.Row="1">
      <View:DetailView/>
</Grid>
ICommand属性:

public ICommand OpenDetail { get; set; }
显示详细信息方法:

    private void ShowDetailExecute()
    {
        ShowMain = false;
        ShowSearch = false;
        ShowDetail = true;
        Header = "Detail";
        var temp = from a in SquirrelDataBase
                   where a.ID == selectedItem.ID && a.Type == selectedItem.Type
                   select a;
        foreach (var item in temp)
        {
            Record = item;
        }
        //MessengerInstance.Send(Record, "Record");
    }
ShowDetail属性:

    private bool showDetial;

    public bool ShowDetail
    {
        get { return showDetial; }
        set
        {
            showDetial = value;
            RaisePropertyChanged("ShowDetail");
        }
    }
注册信息:

MessengerInstance.Register<SquirrelDataGridActiveView>(this, "Record", payload => Record = payload);
MessengerInstance.Register(这个“记录”,有效载荷=>Record=payload);

任何指导都将不胜感激。

某处正在改变ShowDetail的值,提示显示视图。你能发布代码来说明这是如何发生的吗?这似乎是一个很好的方法:当使用多个“用户控件”时,我应该这样构造视图/视图模型吗?现在我很困惑。我本来打算建议把Messenger.Send放入ShowDetailExecute,但看起来你已经尝试过了。使用Messenger从ShowDetailExecute传递值有什么问题?是的,问题是详细视图与窗口同时实例化,因此详细视图模型何时知道查找消息?我甚至尝试通过EventToCommand将事件“IsVisibilityChanged”绑定到Command,但没有成功。“详细视图模型何时知道查找消息?”-您是否在详细视图模型中注册了正确类型的消息?消息注册应该在DetailViewModel的构造函数中进行:Messenger.Default.Register(这是OnMyMessageReceived)。某些地方正在更改ShowDetail的值,提示显示视图。你能发布代码来说明这是如何发生的吗?这似乎是一个很好的方法:当使用多个“用户控件”时,我应该这样构造视图/视图模型吗?现在我很困惑。我本来打算建议把Messenger.Send放入ShowDetailExecute,但看起来你已经尝试过了。使用Messenger从ShowDetailExecute传递值有什么问题?是的,问题是详细视图与窗口同时实例化,因此详细视图模型何时知道查找消息?我甚至尝试通过EventToCommand将事件“IsVisibilityChanged”绑定到Command,但没有成功。“详细视图模型何时知道查找消息?”-您是否在详细视图模型中注册了正确类型的消息?消息注册应该在DetailViewModel的构造函数中进行:Messenger.Default.Register(这是OnMyMessageReceived)。
MessengerInstance.Register<SquirrelDataGridActiveView>(this, "Record", payload => Record = payload);