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