Можно ли установить DataContext через триггер в xaml? - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь установить контекст данных родительского StackPanel в зависимости от логического значения.

У меня есть логическое значение с именем IsProductMode.

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

Я хотел сказатьлогическое значение для переключения DataContext из StackPanel и связывания их с моим 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>

Что яПробовал:

Я попытался удалить триггер и попытался сначала установить контекст данных на EditFormSelectedProduct, а затем EditFormSelectedService.В результате TextBox отображал правильные значения Name в зависимости от контекста данных.Поэтому, по крайней мере, я доказал, что источники действительно заполнены и что их привязки работают.

На данный момент я временно остановился на наличии двух панелей стека, каждый из которых имеет свой собственный соответствующий контекст данных, и установил их видимость.в зависимости от IsProductMode.

То, что я ожидал:

Я ожидал, что он установит соответствующий контекст данных в зависимости от логического значения, но он продолжает устанавливаться на EditFormSelectedProduct независимо от логического значениязначение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...