WPF MVVM:前面板,以阻止所有控件
问题描述:
我的主窗口视图:WPF MVVM:前面板,以阻止所有控件
<Window.Resources>
<BooleanToVisibilityConverter x:Key="BoolToVisibility"/>
</Window.Resources>
<Grid x:Name="TopGrid">
<Rectangle x:Name="TopPanel" Grid.ZIndex="3"
Fill="LightBlue" Opacity="0.3"
Visibility="{Binding IsContentBlocked, Mode=TwoWay, Converter={StaticResource BoolToVisibility}}" />
<Grid Name="main" DataContext="{StaticResource mainViewModel}">
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.2*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!-- Here my controls: stackpanel, buttons, groupboxes, etc. -->
</Grid>
</Grid>
视图模型:
private bool isContentBlocked = false;
public bool IsContentBlocked
{
get
{
return this.isContentBlocked;
}
set
{
if (this.isContentBlocked == value)
{
return;
}
this.isContentBlocked = value;
OnPropertyChanged("IsContentBlocked");
}
}
最初,当我启动WPF应用程序,顶部面板应该被隐藏所以应该启用所有的内容,用户应该能够与他们一起玩,但由于某种原因,顶部面板没有被隐藏,它被显示,所以所有内容都不能被访问。我使用矩形将内容设置为阻止。
我在做什么错?
我的视图模型正在实现INotifyPropertyChanged。
答
只要你IsContentBlocked
属性在mainViewModel
定义,您应该设置TopGrid
的DataContext
这一个
<Grid x:Name="TopGrid" DataContext="{StaticResource mainViewModel}">
<Rectangle x:Name="TopPanel" Grid.ZIndex="3"
Fill="LightBlue" Opacity="0.3"
Visibility="{Binding IsContentBlocked, Converter={StaticResource BoolToVisibility}}" />
<Grid Name="main">
<Grid.RowDefinitions>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
<RowDefinition></RowDefinition>
<RowDefinition Height="auto"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="1.2*"></ColumnDefinition>
<ColumnDefinition Width="*"></ColumnDefinition>
</Grid.ColumnDefinitions>
<!-- Here my controls: stackpanel, buttons, groupboxes, etc. -->
</Grid>
</Grid>
+0
是的,将datacontext移动到外部网格正在工作。谢谢。 – user1624552
这'的DataContext =“{StaticResource的mainViewModel}”'建议你没有你viewmodel可用于树的上方,所以你的'Rectangle.Visibility'没有任何东西可以绑定到。您应该在调试期间检查“输出”窗口以查看绑定失败。 – Evk
有一件事跳出来:你不应该在'Visibility'上使用'TwoWay'绑定模式。 –
@Evk感谢您的建议。我不得不将datacontext上移到外部网格。现在有用。 – user1624552