2017-10-09 30 views
-1

我的主窗口视图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。

+0

这'的DataContext =“{StaticResource的mainViewModel}”'建议你没有你viewmodel可用于树的上方,所以你的'Rectangle.Visibility'没有任何东西可以绑定到。您应该在调试期间检查“输出”窗口以查看绑定失败。 – Evk

+1

有一件事跳出来:你不应该在'Visibility'上使用'TwoWay'绑定模式。 –

+0

@Evk感谢您的建议。我不得不将datacontext上移到外部网格。现在有用。 – user1624552

回答

-1

只要你IsContentBlocked属性在mainViewModel定义,您应该设置TopGridDataContext这一个

<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