首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在绑定的对象上切换停靠面板是null和not null,我猜UpdateSourceTrigger不工作

如何在绑定的对象上切换停靠面板是null和not null,我猜UpdateSourceTrigger不工作
EN

Stack Overflow用户
提问于 2017-01-26 23:22:20
回答 1查看 66关注 0票数 0

我的TabItem DataContext绑定了一个视图模型。它显示了该停靠面板中包含的所有UIContols (假设停靠面板的名称为DoockpanelWithdata)。我想要做的是,当我的Viewmodel对象的值等于null时,我想显示另一个Dockpanel,告诉它没有数据(假设是DoockpanelWithOutData)。

我的尝试是:

当VM==null和not null时如何切换这些停靠面板?

代码语言:javascript
复制
 <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>

在视图模型(UR1R2_VM.cs)中,我有:

代码语言:javascript
复制
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");
        }
    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-27 00:02:15

给你..。

只要确保您的GraphVM属性在更改(即设置为空)时调用RaisePropertyChanged即可。为了设置触发器,这一点很重要。

代码语言:javascript
复制
<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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41876845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档