Silverlight应用的简化架构:
问题是,当我在MainViewModel中将RectVisible属性设置为Visibility.Collapsed时,Rectangle隐藏,这很好,但是当我将Visibility.Collapsed设置为UserControl(UserControlVisible属性)时,它永远不会隐藏!
我无法隐藏该用户控件,我必须通过我的ViewModel类来完成它。为什么它适用于Rectangle元素,但不适用于UserControl?当我在XAML中手动将Visibility设置为Collapsed时,它是隐藏的,但我必须通过代码和ViewModel对象来完成。
(编辑)临时溶解:
我手动订阅了codebehind
中的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 :(得分:1)
我有同样的问题,我修复了它,我不知道我的解决方案是否适合你。 我的“MainPage”的datacontext与UserControl的datacontext不同。 我通过XAML手动为我的usercontrol设置了datacontext 我举一个例子:
<local:myusercontrol DataContext="myusercontroldatacontext" Visibiltiy="{Binding Path=VisibleProperty}"/>
这种情况下的VisibleProperty应该属于myusercontroldatacontext,而不是定义父xaml的datacontext
答案 1 :(得分:0)
您可能需要找到一种方法将Visibility属性绑定到用户控件的视觉效果(Grid / Panel)的根目录。