Binding vs. x: Bind, используя StaticResource по умолчанию и их различия в DataContext

Я потратил половину дня, пытаясь сделатьItemTemplate изListView сUserControl настраивается с помощьюDependencyProperty на сказалUserControl, Я столкнулся с некоторыми странными несоответствиями в отношении двух разныхBinding методы доступны на платформе Windows 10 UAP (Binding а такжеx:Bind).

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

<UserControl
   x:Class="FlowDesigner.UserControls.CalendarDayView"
   xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
   xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
   xmlns:local="using:FlowDesigner.UserControls"
   xmlns:vw="using:FlowDesigner.ViewModels"
   xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
   xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
   xmlns:uc="using:FlowDesigner.UserControls"
   mc:Ignorable="d"
   d:DesignHeight="300"
   d:DesignWidth="400"
   x:Name="DateControl">
   <UserControl.Resources>
      <DataTemplate x:Key="DefaultDataTemplate" x:DataType="vw:Event" >
          <uc:EventListTemplate IsToday="{Binding Date, Converter={StaticResource IsTodayConverter}}" 
                              Date="{Binding Date, Mode=OneWay}"
                              Summary="{Binding Path=Summary, Mode=OneWay}" />
      </DataTemplate>
   </UserControl.Resources>
   <RelativePanel Background="White" BorderBrush="Black" BorderThickness="1" DataContext="{Binding ElementName=DateControl}">
       <TextBlock x:Name="DayText" TextAlignment="Center" VerticalAlignment="Center" />
       <TextBlock x:Name="MonthText" TextAlignment="Center" VerticalAlignment="Center" RelativePanel.RightOf="DayText" />
       <ListView x:Name="EventList" ItemsSource="{x:Bind Events, Mode=OneWay}" 
              ItemTemplate="{Binding Path=EventItemTemplate, Mode=OneWay, FallbackValue={StaticResource DefaultDataTemplate}, TargetNullValue={StaticResource DefaultDataTemplate}}" 
              RelativePanel.Below="DayText" RelativePanel.AlignLeftWithPanel="True" RelativePanel.AlignRightWithPanel="True">

        </ListView>
    </RelativePanel>
</UserControl>

EventItemTemplate этоDependencyProperty изUserControl.

public DataTemplate EventItemTemplate
{
    get { return (DataTemplate)GetValue(EventItemTemplateProperty); }
    set { SetValue(EventItemTemplateProperty, value); }
}

public static readonly DependencyProperty EventItemTemplateProperty =
        DependencyProperty.Register("EventItemTemplate", typeof(DataTemplate), typeof(CalendarDayView), new PropertyMetadata(null));

Который изменен на одной из корневых страниц для стилизацииListView так или иначе, вот так.

<Style TargetType="uc:CalendarDayView">
    <Setter Property="EventItemTemplate">
        <Setter.Value>
            <DataTemplate x:DataType="vw:Event" >
                <TextBlock Text="{Binding Summary, Mode=OneWay}" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

На самом деле это рабочая версия, но мне пришлось немного повозиться с ней. Первые попытки были сделаны мной с обоимиx:Bind а такжеBinding и безDataContext наRelativePanel какUserControl сейчас.x:Bind будет функциональным при установке значения вEventItemTemplate в корневой странице, но он не сможет использовать по умолчаниюDataTemplate определяетсяStaticResource когда на корневой странице ничего не указано.Binding с другой стороны будет использовать по умолчаниюDataTemplate всегда, даже когда на корневой странице было установлено другое значениеEventItemTemplate.

УстановивDataContext наRelativePanel кUserControl Binding начал работать как хотел тоже.x:Bind по-прежнему показывает то же поведение.

Теперь я понимаю, чтоBinding по умолчанию не привязывается кUserControl«sDataContext, но я до сих пор не совсем уверен, почемуx:Bind не работает Это предполагаемое поведение или что-то не так со всей моей схемой здесь, и это то, что я придумал, просто удачный взлом?

Ответы на вопрос(1)

Ваш ответ на вопрос