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");
}
}
당신이 잘 작동하는 코드는,하지만 당신은 'DockPanelWithData'에 대한 컨텐트의 DataContext를 설정해야만합니까? 기본 DataContext는'Graph_VM' 객체가 아닌'UR1R2_VM'이 될 것입니다. 그 이외에 GraphVM을 설정하여 예상 값으로 설정되어 있는지 확인하기 위해 중단 점을 둘 수 있습니까? – Rachel
내가 처음 알았던 tabitem에서 UR1R2_VM viewmodel의 Selecteditem 속성에 선택된 항목을 listview에 바인딩했습니다. 어느 행을 선택하면 GraphVM 객체가 인스턴스화됩니다. 두 dockpanel이 모두 포함 된 두 번째 ab는 GraphVM 클래스의 datacontext로 설정됩니다. –