【发布时间】:2016-06-22 12:58:14
【问题描述】:
我的页面可以包含 4 个不同的用户控件,但一次只能看到其中一个。我想做这样的事情:
<regControls:MyUserControl1 Visibility="{Binding Ctrl1, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" />
<regControls:MyUserControl2 Visibility="{Binding Ctrl2, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" />
<regControls:MyUserControl3 Visibility="{Binding Ctrl3, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" />
<regControls:MyUserControl4 Visibility="{Binding Ctrl4, Mode=TwoWay, Converter={StaticResource BoolToVisibilityConverter}" />
但是当组件初始化时,转换器根本不会被触发。即使我绑定属性并引发执行更改。
我不希望在后面的代码中初始化不同的控件。我正在使用 WP8 Silverlight(不是 WP 8.1)。我错过了什么?
编辑:
我开始明白这个问题了。但我不知道如何解决它。我们正在使用 GWT,所以我从 GWT 层接到一个电话,告诉我要显示什么:
public void ShowMyUserControl1()
{
SimpleIoc.Default.Register<MyPageViewModel>();
SimpleIoc.Default.Register<MyUserControl1ViewModel>();
SimpleIoc.Default.Register<MyUserControl2ViewModel>();
SimpleIoc.Default.Register<MyUserControl3ViewModel>();
SimpleIoc.Default.Register<MyUserControl4ViewModel>();
navigationService.NavigateTo(typeof(MyPageViewModel).FullName);
var viewModel = SimpleIoc.Default.GetInstance<MyPageViewModel>();
viewModel.DisplayMyUserControl1();
}
public void ShowMyUserControl2()
{
....
}
这里的问题是在组件初始化之前调用了视图模型并触发了属性。这里的问题也是我不知道从 GWT 调用哪个方法。它可能是 ShowMyUserControl1 或 ShowMyUserControl2 (或请求显示控件 3 或 4 的方法。所以我需要以某种方式告诉这一点,同时使用来自 GWT 的参数将参数传递给正确的视图模型。Messenger (MVVMLight) 不会在这里工作。因为消息是在任何控件被初始化并注册以收听这些消息之前发送的。用户可以离开应用程序并关闭手机然后再次回来,所以我需要期望视图模型不会'不存在,需要注册。
【问题讨论】:
标签: c# windows-phone-8 mvvm-light