“我进行了一些逐步调试,但 ViewModel 构造函数似乎永远无法到达。”
确保您实际上使用以下方法之一将视图绑定到视图模型:
In 隐藏代码
var showReservoir = new ReservoirViewerView();
showReservoir.DataContext = ViewModelLocator.ReservoirViewerViewModel; //static property
//OR showReservoir.DataContext = new ReservoirViewerViewModel();
showReservoir.Show();
In XAML视图
<Window x:Class="Garmin.Cartography.AdminBucketTools.ChildWindowView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding Path=ReservoirViewerViewModel, Source={StaticResource Locator}}">
<!--Use the non-static property in your ViewModelLocator-->
<Grid />
</Window>
In XAML资源
<DataTemplate DataType="{x:Type viewmodels:ReservoirViewerViewModel}">
<views:ReservoirViewerView/>
</DataTemplate>
“我需要的是新的 ViewModel (ReservoirViewerViewModel) 可以通过消息以某种方式获取传递的对象,以便我可以在子窗口上显示该对象的详细信息。”
只需在 ReservoirViewerViewModel 类中注册相同的消息即可:
Messenger.Default.Register<LaunchShowReservoirMessage>(this, (msg) =>
{
var reservoir = msg.Reservoir;
});
仅供参考,如果您从 GenericMessage 而不是 MessageBase 派生消息类,则可以使用 GenericMessage 类已定义的 Content 属性。例如:
public class LaunchShowReservoirMessage: GenericMessage<Reservoir>
{
public LaunchShowReservoirMessage(Reservoir content) : base(content) { }
}
进而:
Messenger.Default.Register<LaunchShowReservoirMessage>(this, (msg) =>
{
var reservoir = msg.Content;
});