을 클릭하십시오. 클릭 한 항목의 세부 정보를 ListView
에 표시하면 클릭 한 항목이 런타임에 콘텐츠로 설정됩니다. 컨트롤의 DataContext
, 그리고 내가 Datacontext
가 업데이트이 ContentControl
의 DataTemplate
모든 시간을 변경하는 방법을 알고 기꺼이에서, DataContext
DataTemplateSelector
만의 값에 따라, 템플릿은 한 번만 설정하고 때 DataContext
변경, 초기 템플릿 고소 된 경우 업데이트되지 않습니다. 그래서 VisualTriggers
을 사용하여 진행하기로 결정했는데,이 방법을 사용하면 DataTemplate
이 표시되지 않기 때문에이 방법도 작동하지 않는 것으로 보입니다. 이 내가 DataTriggers 사용하는 경우 내 코드입니다 : 나는 DataTemplate
변화 everytime
DataContext
설정 값이 "Uno"
또는 "Duo"
이 도와주세요 값의 속성 Type
을 가지고 있는지 확인하고자하는런타임시 ContentControl의 DataTemplate을 변경하는 UWP Xaml DataContext의 속성 값에 따라
<ContentControl x:Name="baseTemplate" DataContext="{Binding Selected}">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup>
<VisualState x:Name="Uno">
<VisualState.StateTriggers>
<dataTriggers:FocusDataTrigger
dataTriggers:FocusDataTrigger.TriggerValue="Uno"
dataTriggers:FocusDataTrigger.DataValue="{Binding DataContext.Type}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="baseTemplate.Template" Value="{StaticResource UnoTemplate}"/>
</VisualState.Setters>
</VisualState>
<VisualState x:Name="Duo">
<VisualState.StateTriggers>
<dataTriggers:FocusDataTrigger
dataTriggers:FocusDataTrigger.TriggerValue="Duo"
dataTriggers:FocusDataTrigger.DataValue="{Binding DataContext.Type}"/>
</VisualState.StateTriggers>
<VisualState.Setters>
<Setter Target="baseTemplate.Template" Value="{StaticResource detailTemplateSelector}"/>
</VisualState.Setters>
</VisualState>
</VisualStateGroup>
</VisualStateManager.VisualStateGroups>
</ContentControl>
을!, 나는 많은 시도 내가 할 수 있듯이, 그러나 나는 이것을위한 해결책을 찾을 수 없다.
나는 그것은 당신이 잘못된 방향으로가는 것 같다 지정 DataTrigger
public class FocusDataTrigger : StateTriggerBase
{
#region DataValue
public static readonly DependencyProperty DataValueProperty =
DependencyProperty.RegisterAttached("DataValue", typeof(object),
typeof(FocusDataTrigger), new PropertyMetadata(null, DataValueChanged));
public static object GetDataValue(DependencyObject obj)
{
return obj.GetValue(DataValueProperty);
}
public static void SetDataValue(DependencyObject obj, object value)
{
obj.SetValue(DataValueProperty, value);
}
#endregion
#region TriggerValue
public static readonly DependencyProperty TriggerValueProperty =
DependencyProperty.RegisterAttached("TriggerValue", typeof(object),
typeof(FocusDataTrigger), new PropertyMetadata(false, TriggerValueChanged));
public static object GetTriggerValue(DependencyObject obj)
{
return obj.GetValue(TriggerValueProperty);
}
public static void SetTriggerValue(DependencyObject obj, object value)
{
obj.SetValue(TriggerValueProperty, value);
}
#endregion
private static void TriggerStateCheck(DependencyObject target, object datavalue, object triggerValue)
{
FocusDataTrigger trigger = target as FocusDataTrigger;
if (trigger == null) return;
trigger.SetActive(triggerValue == datavalue);
}
private static void TriggerValueChanged(DependencyObject target, DependencyPropertyChangedEventArgs e)
{
object datavalue = target.GetValue(FocusDataTrigger.DataValueProperty);
TriggerStateCheck(target, datavalue, e.NewValue);
}
private static void DataValueChanged(DependencyObject target,
DependencyPropertyChangedEventArgs e)
{
object triggerValue = target.GetValue(FocusDataTrigger.TriggerValueProperty);
TriggerStateCheck(target, e.NewValue, triggerValue);
}
}
감사합니다. 내가 그것을 시도하자. –
감사합니다. 그러나 이것은 DataTemplate을 한 번만 설정합니다. datacontext가 변경되면 런타임에 dataTemplate을 동적으로 변경하려고합니다. –