2017-01-26 28 views
0

我有一个绑定到我的TabItem DataContext的视图模型。它显示了该dockset中包含的所有UIContols(可以说Dockpanel的名字是DoockpanelWithdata)。 我想要做的是,当我有Viewmodel对象的值等于空然后我想显示其他Dockpanel说没有数据(让我们说DoockpanelWithOutData)。如何切换绑定对象上的dockpanels为null并非null,UpdateSourceTrigger无法正常工作我猜

我的尝试是这样的:

如何切换这些dockpanels当VM == null和not null?

<TabControl> 
      <TabItem Name="Tab1" Cursor="Hand">     
       <ListView Name="lZ" ItemsSource="{Binding UObj}" SelectedItem="{Binding SelectedItem ,Mode=TwoWay}" >//On selected item i bind the the tabitem below which show different dockpanels on GM=null and not null 
       //columns here 
       </ListView> 
      </TabItem> 
      <TabItem Name="TabGraph" DataContext="{Binding GM , UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" Cursor="Hand">     
       <DockPanel Name="DoockpanelWithOutData"> 
        <DockPanel.Style> 
         <Style TargetType="DockPanel"> 
          <Setter Property="Visibility" Value="Collapsed" /> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding GM, UpdateSourceTrigger=PropertyChanged}" Value="{x:Null}"> 
            <Setter Property="Visibility" Value="Visible" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </DockPanel.Style> 
        <TextBlock>There IS NO DATA</TextBlock> 
       </DockPanel> 
       <DockPanel Name="DoockpanelWithdata"> 
        <DockPanel.Style> 
         <Style TargetType="DockPanel"> 
          <Setter Property="Visibility" Value="Visible" /> 
          <Style.Triggers> 
           <DataTrigger Binding="{Binding GraphVM, UpdateSourceTrigger=PropertyChanged}" Value="{x:Null}"> 
            <Setter Property="Visibility" Value="Collapsed" /> 
           </DataTrigger> 
          </Style.Triggers> 
         </Style> 
        </DockPanel.Style> 
        //Some more data 
       </DockPanel> 
      </TabItem> 
     </TabControl> 

在视图模型(UR1R2_VM.cs)我有:

private ObservableCollection<UModel> uObj; //binded to itemsource of another TabItem 
public ObservableCollection<UModel> UObj 
     { 
      get { return uObj; } 
      set { uObj= value; OnPropertyChanged("UObj"); } 
     } 
     private UModel selectedItem; //Binded to listView selecteditem of another tabitem   
    public UModel SelectedItem //HERE INSTANCE IS CREATED 
    { 
     get { return selectedItem; } 
     set 
     { 
      selectedItem = value; 
      GM = selectedItem != null ? new GM(selectedItem.Nom) : null; //HERE INSTANCE IS CREATED 
      OnPropertyChanged("SelectedItem");     
     } 
    }  


    private GM gM; 
    public GM GM 
    { 
     get { return gM; } 
     set 
     { 
      gM = value; 
      OnPropertyChanged("GM"); 
     } 
    } 
+0

您的代码对我来说工作正常,但是您是否确保为'DockPanelWithData'的内容设置DataContext?默认的DataContext将是你的'UR1R2_VM',而不是你的'Graph_VM'对象。除此之外,您可以在设置GraphVM的位置放置断点以确保将其设置为期望值? – Rachel

+0

我不知道你是否注意到,在我的第一个tabitem我已经绑定列表视图选择项目SelectedItem属性在我的UR1R2_VM viewmodel。在选择一行时实例化GraphVM对象。包含两个dockpanel的第二个ab设置为GraphVM类的datacontext。 –

回答

0

在这里,你去..

只要确保每当它改变了你的GraphVM属性是在调用RaisePropertyChanged(即被设置为空)。这对触发器的设置非常重要。

<DockPanel Name="DoockpanelWithOutData"> 
    <DockPanel.Style> 
    <Style TargetType="DockPanel"> 
     <Setter Property="Visibility" Value="Collapsed" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding DataContext, UpdateSourceTrigger=PropertyChanged}" Value="{x:Null}"> 
      <Setter Property="Visibility" Value="Visible" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </DockPanel.Style> 
    <TextBlock>There IS NO DATA</TextBlock> 
</DockPanel> 
<DockPanel Name="DoockpanelWithdata"> 
    <DockPanel.Style> 
    <Style TargetType="DockPanel"> 
     <Setter Property="Visibility" Value="Visible" /> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding DataContext, UpdateSourceTrigger=PropertyChanged}" Value="{x:Null}"> 
      <Setter Property="Visibility" Value="Collapsed" /> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </DockPanel.Style> 
    //Some more data 
</DockPanel> 
+0

我觉得UpdateSourceTrigger = PropertyChanged不起作用。在两种情况下,当GraphVM初始化且未初始化时,它仍然显示DoockpanelWithOutData。 –

+0

您的DataContext错误,或者您的VM属性设置不正确。需要更多的代码?发布你的相关虚拟机和虚拟机属性 –

+0

我已经更新了代码,请参阅 –

相关问题