【问题标题】:StackPanel visibility VS Grid VisibilityStackPanel 可见性 VS 网格可见性
【发布时间】:2013-06-14 08:00:20
【问题描述】:

我正在使用 MVVM 应用程序,但有一些不明白的地方.. StackPanel 可见性和网格可见性有什么区别。 如果我有这个网格......

 <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>

可见性很好。

为什么?

【问题讨论】:

  • “不起作用”是什么意思?
  • 绑定不存在。
  • 什么?你的意思是路径不存在?如果您不提供足够的信息,就不可能为您提供帮助。我们可以复制/粘贴到 repro 的东西是理想的。
  • 换句话说,为什么绑定对网格不起作用?为什么我需要用具有相同绑定的堆栈面板包装它并且它可以工作。
  • 再一次,因为你没有提供复制品,我不能告诉你为什么。我怀疑还有比你的问题明显的更多。请提供一份复制/粘贴复制品,以便我们真正为您提供帮助。

标签: wpf mvvm visibility


【解决方案1】:

GridDataContextCurrentMonitorAlertStackPanelDataContextMonitorAlertViewModel。因此,与NoMonitorsMessageVisibility 的绑定正在解决您的Grid 案例中的错误问题。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-10
    • 1970-01-01
    • 2019-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    相关资源
    最近更新 更多