是否可以通过xaml中的触发器设置DataContext?

时间:2019-05-29 05:41:18

标签: c# wpf xaml

我正在尝试根据布尔值设置父StackPanel的数据上下文。

我有一个名为IsProductMode的布尔值。

private bool isProductMode;
public bool IsProductMode
{
    get { return isProductMode; }
    set { isProductMode = value; RaisePropertyChange("IsProductMode"); }
}

我想说布尔值来切换StackPanel的DataContext并将它们绑定到我的EditFormSelectedProductEditFormSelectedService两者都具有属性Name绑定到堆栈面板的子TextBox的文本

<StackPanel>
   <Label Content="Name" />
   <TextBox Text="{Binding Name}" />
   <StackPanel.Style>
       <Style TargetType="{x:Type StackPanel}">
           <Setter Property="DataContext" Value="{Binding EditFormSelectedProduct}"/>
           <Style.Triggers>
               <DataTrigger Binding="{Binding IsProductMode}" Value="False">
                   <Setter Property="DataContext" Value="{Binding EditFormSelectedService}"/>
               </DataTrigger>
           </Style.Triggers>
       </Style>
   </StackPanel.Style>
</StackPanel>

我尝试过的事情:

我尝试删除触发器,并尝试将Data Context首先设置为EditFormSelectedProduct,然后设置为EditFormSelectedService。结果是TextBox根据其数据上下文显示正确的Name值。因此,至少,我证明了这些来源确实存在并且它们的绑定有效。

目前,我暂时决定拥有两个堆栈面板,每个面板都有各自合适的数据上下文,并根据IsProductMode设置其可见性。

我所期望的:

我希望它根据布尔值设置适当的数据上下文,但是无论布尔值如何,它都会一直设置为EditFormSelectedProduct

0 个答案:

没有答案