Wpf 如何在绑定对象上切换DockPanel为null且不为null,我想UpdateSourceTrigger不起作用
我有一个绑定到TabItem DataContext的视图模型。它显示了dockpanel中包含的所有UIControl(假设dockpanel的名称是DoockpanelWithdata)。 我想做的是,当Viewmodel对象的值等于null时,我想显示其他Dockpanel,表示没有数据(比如DoockPanel Without data) 我的尝试是: 当VM==null和notnull时,如何切换这些dockpanelWpf 如何在绑定对象上切换DockPanel为null且不为null,我想UpdateSourceTrigger不起作用,wpf,mvvm,binding,datacontext,tabitem,Wpf,Mvvm,Binding,Datacontext,Tabitem,我有一个绑定到TabItem DataContext的视图模型。它显示了dockpanel中包含的所有UIControl(假设dockpanel的名称是DoockpanelWithdata)。 我想做的是,当Viewmodel对象的值等于null时,我想显示其他Dockpanel,表示没有数据(比如DoockPanel Without data) 我的尝试是: 当VM==null和notnull时,如何切换这些dockpanel <TabControl> &
<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>
//在所选项目上,我将标签绑定到下面的tabitem,它在GM=null和notnull上显示不同的dockPanel
//这里的栏目
没有数据
//更多数据
在视图模型(UR1R2_VM.cs)中,我有:
私有可观测采集uObj//绑定到另一个TabItem的itemsource
公共可观测收集UObj
{
获取{return uObj;}
设置{uObj=value;OnPropertyChanged(“uObj”);}
}
私有UModel selectedItem//绑定到另一个选项卡项的listView selecteditem
public UModel SelectedItem//此处创建实例
{
获取{return selectedItem;}
设置
{
选择editem=值;
GM=selectedItem!=null?新建GM(selectedItem.Nom):null;//此处创建实例
OnPropertyChanged(“SelectedItem”);
}
}
私人总经理;
公共总经理
{
获取{return gM;}
设置
{
gM=价值;
不动产变更(“GM”);
}
}
给你
只要确保您的GraphVM
属性在发生更改时(即设置为null)正在调用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>
没有数据
//更多数据
我觉得UpdateSourceTrigger=PropertyChanged不起作用。当GraphVM初始化和未初始化时,在这两种情况下,它仍然显示DoockPanelWithout数据。要么是DataContext错误,要么是VM属性设置不正确。需要更多的代码吗?发布相关VM和VM属性请查看我绑定SelectedItem的列表视图,因为我在lsitview的SelectedItem上实例化了GraphVM。我看到了问题所在。DataContext设置错误。。由于DockPanel位于TabControl内部,因此需要基于外部DataContext进行触发。查看更新我不知道您是否注意到,在我的第一个选项卡项中,我已将listview selected项绑定到我的UR1R2\u VM viewmodel中的Selecteditem属性。它在选择一行时实例化GraphVM对象。第二个ab包含两个dockpanel,它被设置为GraphVM类的datacontext。您的代码对我来说很好,但是您是否确保为DockPanelWithData
设置内容的datacontext?默认数据上下文将是您的UR1R2\u VM
,而不是您的Graph\u VM
对象。除此之外,您是否可以在设置GraphVM的位置设置断点,以确保它被设置为预期值?我不知道您是否注意到,在我的第一个选项卡项中,我已将listview selected项绑定到UR1R2\u VM viewmodel中的Selecteditem属性。它在选择一行时实例化GraphVM对象。第二个ab包含dockpanel和GraphVM类的datacontext。
<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>