代码之家  ›  专栏  ›  技术社区  ›  Hrvoje Hudo

通过ViewModel的UserControl可见性绑定

  •  0
  • Hrvoje Hudo  · 技术社区  · 16 年前

    我的Silverlight应用程序的简化架构:

    • 主页面;DataContext设置为MainViewModel
    • MainPage有两个元素:UserControl和Rectangle
    • 在MainViewModel中,我有两个属性,UserControlVisible和RectVisible,都是类型Visibility,绑定到MainPage.XAML中这两个元素的可见性属性
    • MainViewModel已实现INotifyPropertyChanged

    问题是,当我将MainViewModel中的RectVisible属性设置为Visibility.Collapsed时,矩形会隐藏,这很好,但当我将Visibility.Collapsed设置为UserControl(UserControlVisible属性)时,它从不隐藏!
    我无法隐藏该用户控件,必须通过ViewModel类来实现。为什么它与矩形元素一起工作,而不与UserControl一起工作?当我在XAML中手动将可见性设置为Collapsed时,它就隐藏了,但我必须通过代码和ViewModel对象来实现。

    (编辑)

    void MainPage_Loaded(object sender, RoutedEventArgs e)
    {
        viewmodel=new MainViewModel();
        this.DataContext = viewmodel;
        // fix for binding bug:
        viewmodel.PropertyChanged += viewmodel_PropertyChanged;
    }
    
    void viewmodel_PropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        if (e.PropertyName == "LoginVisible")
            loginWindowControl.Visibility = viewmodel.LoginVisible;
    }
    
    2 回复  |  直到 16 年前
        1
  •  1
  •   Ghassan Karwchan    16 年前

    我也有同样的问题,我已经解决了,我不知道我的解决方案是否对你有用。 我举个例子:

    <local:myusercontrol  DataContext="myusercontroldatacontext" Visibiltiy="{Binding Path=VisibleProperty}"/>
    

        2
  •  0
  •   Jeff Wilcox    16 年前

    您可能需要找到一种方法将Visibility属性绑定到用户控件的视觉效果的根(网格/面板)。