StackPanel可见性VS Grid可见性



我正在使用MVVM应用程序,有一些不理解的东西…StackPanel可见性和Grid可见性之间的区别是什么?如果我有这个网格…

 <UserControl x:Class="Envitech.Setup.Presentation.Views.MonitorScreenViews.MonitorAlertViews.MonitorAlertView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="438" d:DesignWidth="842" xmlns:popup="clr-namespace:Envitech.Setup.Presentation.Views.GlobalViews">
    <DockPanel DataContext="{Binding MonitorAlertViewModel}" Width="824" HorizontalAlignment="Left" VerticalAlignment="Top" Height="435">                        
        <Grid DataContext="{Binding CurrentMonitorAlert}" Height="422" Visibility="{Binding Path=NoMonitorsMessageVisibility, Converter={StaticResource visibilityConverter}}">
            <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="10,103,0,0"  VerticalAlignment="Top" />            
        </Grid>
    </DockPanel>
</UserControl>

可见性不起作用,但是如果我这样做…

 <UserControl x:Class="Envitech.Setup.Presentation.Views.MonitorScreenViews.MonitorAlertViews.MonitorAlertView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"  xmlns:d="http://schemas.microsoft.com/expression/blend/2008" mc:Ignorable="d" d:DesignHeight="438" d:DesignWidth="842" xmlns:popup="clr-namespace:Envitech.Setup.Presentation.Views.GlobalViews">
    <DockPanel DataContext="{Binding MonitorAlertViewModel}" Width="824" HorizontalAlignment="Left" VerticalAlignment="Top" Height="435">                
        <StackPanel Visibility="{Binding Path=NoMonitorsMessageVisibility, Converter={StaticResource visibilityConverter}}">
        <Grid DataContext="{Binding CurrentMonitorAlert}" Height="422">
            <Label Content="Value" Height="28" HorizontalAlignment="Left" Margin="10,103,0,0"  VerticalAlignment="Top" />            
        </Grid>
        </StackPanel>       
    </DockPanel>
</UserControl>

可视性很好。

为什么?

Grid中的DataContextCurrentMonitorAlertStackPanelDataContextMonitorAlertViewModel。因此,在Grid的情况下,对NoMonitorsMessageVisibility的绑定解决了错误的问题。

像这样在视图中设置DataContext有点不正统。通常,在执行MVVM时,您让WPF处理设置DataContext(可能在根级别除外),并在必要时在绑定中使用更深的路径。您可以考虑采用这种方法。

最新更新