UserControl上的可见性未触发

时间:2016-06-22 12:58:15

标签: c# windows-phone-8 mvvm-light

我有一个页面,可以包含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)不会&#39在这里工作。因为消息是在任何控件初始化和注册之前发送的,以便收听这些消息。用户可以离开应用程序并关闭手机然后再回来,所以我需要预期视图模型不存在,需要注册。

1 个答案:

答案 0 :(得分:0)

DataContext(ViewModel)是否支持INotifyPropertyChange? VS中控制台输出中的任何绑定错误? 在属性上创建断点。它暗示了吗?