Wes*_*ken 5 c# xaml binding windows-10
我花了半天的更好试图使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>
Run Code Online (Sandbox Code Playgroud)
该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));
Run Code Online (Sandbox Code Playgroud)
在其中一个根页面上进行了更改,以便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>
Run Code Online (Sandbox Code Playgroud)
这实际上是一个工作版本,但我不得不对它进行修补.第一次尝试是由我都取得了x:Bind和Binding和不DataContext上RelativePanel的UserControl就是现在.在根页面中x:Bind设置值时,它将起作用EventItemTemplate,但它不能使用根页面未指定任何内容时DataTemplate指定的默认值StaticResource.Binding另一方面DataTemplate,即使根页面设置了其他值,也会始终使用默认值EventItemTemplate.
通过设置DataContext在RelativePanel该UserControl Binding开始工作就像想这一点.x:Bind仍然显示相同的行为.
现在我明白Binding默认情况下不会绑定到UserControl's DataContext,但我仍然不完全确定为什么x:Bind不起作用.这是预期的行为,还是我的整个计划出现问题,而我只是想出了一个幸运的黑客行为?
Rah*_*one 10
来自{x:Bind}标记扩展:
Windows 10的{x:Bind}标记扩展名 - 是{Binding}的替代品.{x:Bind}缺少{Binding}的一些功能,但它比{Binding}在更短的时间和更少的内存中运行,并支持更好的调试.
在XAML加载时,{x:Bind}被转换为您可以将其视为绑定对象的内容,并且此对象从数据源上的属性获取值.可以选择将绑定对象配置为观察数据源属性值的更改,并根据这些更改自行刷新.它还可以选择配置为将其自身值的更改推送回源属性.{x:Bind}和{Binding}创建的绑定对象在功能上大致相同.但是{x:Bind}执行它在编译时生成的专用代码,而{Binding}使用通用运行时对象检查.因此,{x:Bind}绑定(通常称为编译绑定)具有很好的性能,提供绑定表达式的编译时验证,并支持调试,使您能够在作为部分生成的代码文件中设置断点您的页面的课程.这些文件可以在obj文件夹中找到,其名称类似于(对于C#).g.cs.
| 归档时间: |
|
| 查看次数: |
5103 次 |
| 最近记录: |