【问题标题】:Visibility on UserControl not triggered未触发 UserControl 上的可见性
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 是的,我对其他视图没有其他问题。不知道如何跟踪 windows phone 8.0 的绑定错误。是的,设置它时它会破坏属性。
    • 创建新转换器并替换其中一个。并在其中创建断点。检查 propertyChange 上的 inputparams。并显示 viewModel 代码。
    • 查看我更新的问题。新转换器不会改变任何东西。使用 mvvmlights 属性更改,即 RaisePropertyChange(() => "PropertyName")
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-02
    • 2018-12-21
    • 2012-06-25
    相关资源
    最近更新 更多