2017-01-26 3 views
0

私はTabItem DataContextにバインドされたビューモデルを持っています。そして、そのドックパネルに含まれているすべてのUIContolsを表示します(ドックパネルの名前はDoockpanelWithdataです)。 私がしたいことは、ViewModelオブジェクトの値がnullの場合、データがないことを示す他のDockpanelを表示することです(DoockpanelWithOutDataといいます)。バインドされたオブジェクトのdockpanelsを切り替える方法はnullで、nullではない、UpdateSourceTriggerが動作していないと思います。

私の試みはこれです:

VMがnullとnullではない==ときに、これらのdockpanelsを切り替える方法は?ビューモデル(UR1R2_VM.cs)で

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

は私が持っている:

ここ
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はあなたの 'Graph_VM'オブジェクトではなく' UR1R2_VM'です。それ以外の場合は、GraphVMを設定してブレークポイントを設定して、期待値に設定されていることを確認できますか? – Rachel

+0

私はあなたが私の最初のtabitemで私は私のUR1R2_VM viewmodelのSelecteditemプロパティにlistview選択項目をバインドしたことに気付いたかどうかは分かりません。どちらの行を選択すると、GraphVMオブジェクトがインスタンス化されます。両方のdockpanelを含む2番目のabは、GraphVMクラスのdatacontextに設定されています。 –

答えて

0

あなたが行く..

はちょうどそれが変わったのたびにGraphVMプロパティはRaisePropertyChangedを呼び出していることを確認してください(すなわち、 nullに設定されます)。これは、トリガを設定するために重要です。

<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プロパティが正しく設定されていません。より多くのコードが必要ですか?あなたの関連するVMとVMのプロパティを投稿してください –

+0

私はコードを更新しました –

関連する問題