我正在尝试根据布尔值设置父StackPanel的数据上下文。
我有一个名为IsProductMode
的布尔值。
private bool isProductMode;
public bool IsProductMode
{
get { return isProductMode; }
set { isProductMode = value; RaisePropertyChange("IsProductMode"); }
}
我想说布尔值来切换StackPanel的DataContext并将它们绑定到我的EditFormSelectedProduct
或EditFormSelectedService
两者都具有属性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
。