2013-06-18 4 views
0

Я использую приложение MVVM, и есть что-то, что не понимает. В чем разница между видимостью StackPanel и видимостью сетки. , если у меня есть эта сетка ...Видимость StackPanel VS 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> 

видимость работает просто отлично.

Почему?

+2

Что вы подразумеваете под "не работает"? –

+0

Связывание не существует. –

+0

что? Вы имеете в виду, что пути не существует? Невозможно помочь вам, если вы не предоставите достаточную информацию. То, что мы можем копировать/вставлять в репродукцию, было бы идеальным. –

ответ

2

DataContextGrid является CurrentMonitorAlert. DataContextStackPanel - MonitorAlertViewModel. Таким образом, привязка к NoMonitorsMessageVisibility устраняет неправильную вещь в вашем случае Grid.

Установка DataContext как будто на всем вашем вид несколько неортодоксально. Обычно при выполнении MVVM вы разрешаете WPF обрабатывать DataContext (за исключением, возможно, на корневом уровне) и при необходимости использовать более глубокие пути в ваших привязках. Возможно, вы захотите рассмотреть этот подход.

Смежные вопросы