J'ai un modèle de vue lié à mon DataContext TabItem. Et il montre tous les UIContols contenus dans ce dockpanel (disons que le nom du dockpanel est DoockpanelWithdata). Ce que je veux faire est, quand j'ai la valeur de l'objet Viewmodel égale à null alors je veux montrer autre Dockpanel disant qu'il n'y a pas de données (disons DoockpanelWithOutData).Comment faire pour basculer dockpanels sur objet lié est null et non null, UpdateSourceTrigger ne fonctionne pas je suppose
Mon essai est la suivante:
Comment changer ces dockpanels lorsque VM == null et non 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>
En voir le modèle (UR1R2_VM.cs) i ont:
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");
}
}
Le code que vous avez fonctionne très bien pour moi, mais assurez-vous cependant de définir le DataContext du contenu de 'DockPanelWithData'? DataContext par défaut sera votre 'UR1R2_VM', et non votre objet' Graph_VM'. Sinon, pouvez-vous mettre un point d'arrêt où vous définissez GraphVM pour vous assurer qu'il est défini sur la valeur attendue? – Rachel
Je ne sais pas si vous avez remarqué que dans mon premier tabitem j'ai lié l'élément sélectionné listview à la propriété Selecteditem dans mon viewmodel UR1R2_VM. Lequel lors de la sélection d'une ligne instancie l'objet GraphVM. Le second ab qui contient à la fois le dockpanel est défini sur datacontext de la classe GraphVM. –