2017-10-09 53 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