2009-08-29 40 views
0

我的Silverlight应用程序的简化架构结合:用户控件能见度通过视图模型

  • 的MainPage; DataContext的集合到MainViewModel
  • 的MainPage有两个要素:用户控件和矩形
  • 在MainViewModel,我有两个属性,UserControlVisible和RectVisible,两个类型的可见性,在MainPage.xaml中
  • 绑定到这两个元件的可见性属性MainViewModel有INotifyPropertyChanged的实施

问题是,当我设置在MainViewModel到Visibility.Collapsed RectVisible财产,矩形隐藏,这是很好的,但是当我设置Visibility.Collapsed到用户控件(UserControlVisible属性),它从来没有隐藏!
我无法隐藏该用户控件,我必须通过ViewModel类来完成。为什么它可以与Rectangle元素一起使用,但不能与UserControl一起使用?当我手动将可见性设置为Collapsed in XAML时,它隐藏了,但我必须通过代码和ViewModel对象来完成。

(编辑)临时sollution:

我手动订阅PropertyChanged事件中的代码隐藏

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; 
} 

回答

0

你可能需要找到Visibility属性绑定到用户控件的根本办法视觉效果(网格/面板)。

+0

尝试,但仍然绑定不起作用,它只隐藏了当我通过代码隐藏设置属性 – 2009-08-31 07:02:02

+0

谨慎分享如何设置绑定(您的XAML的一个子集)? – 2009-08-31 07:35:15

1

我有同样的问题,我修好了,我不知道我的解决方案是否适合你。 我的“MainPage”的datacontext与我的UserControl的datacontext不同。 我手动通过XAML 设置为我的用户在DataContext我举一个例子:

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

的VisibleProperty是这种情况应该属于myusercontroldatacontext,而不是在父XAML是定义在DataContext

+0

例子会很棒 – 2009-10-14 15:33:52

+0

对不起,我没有意识到,如果不添加代码配置文件,xml将不会显示出来。 我再次添加了该示例。 – 2009-10-14 19:44:12