2017-01-26 20 views
0

TabItem DataContext에 연결된 뷰 모델이 있습니다. 그리고 그 dockpanel에 포함 된 모든 UIContols를 보여줍니다 (Dockpanel의 이름은 DoockpanelWithdata라고합니다). 내가하고 싶은 것은, Viewmodel 객체의 값이 null과 같으면 다른 데이터가 없다는 Dockpanel을 보여주고 싶습니다 (DoockpanelWithOutData라고합니다). VM가 null 널 (null)이 아닌 == 때바인드 된 객체의 dockpanels를 전환하는 방법은 null이고 null이 아니며 UpdateSourceTrigger가 작동하지 않습니다. 내 생각에

방법이 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이 모두 포함 된 두 번째 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

코드를 업데이트했습니다 –