编译绑定两种方式
Compiled Binding Two way
我正在尝试使用新的 {x:Bind} 语法设置到 ListView 上 SelectedItem 的两种方式绑定。
查看下面的代码:
XAML
<Page
x:Class="GJ_2.Views.CategoriesEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:GJ_2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:domain="using:GJ_2.Domain"
mc:Ignorable="d" DataContext="{Binding CategoriesViewModel, Source={StaticResource Locator}}"
>
<Page.Resources>
<DataTemplate x:Key="CategoryTemplate" x:DataType="domain:Category">
<Grid Margin="0,0,0,14">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="250" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Image></Image>
<StackPanel Grid.Column="1">
<TextBlock Text="{x:Bind Title}" FontSize="18.667" FontWeight="Bold" TextWrapping="Wrap" />
<TextBlock Text="{x:Bind Description}" />
</StackPanel>
<SymbolIcon Symbol="Up" Grid.Column="2" ></SymbolIcon>
<AppBarButton Grid.Column="4" Foreground="White">
<AppBarButton.Icon>
<PathIcon HorizontalAlignment="Center" VerticalAlignment="Center" Data="M9.99967861175537,0L15.0010814666748,4.41280698776245 20,8.82655048370361 13.8758192062378,8.82655048370361 13.8758192062378,20 6.12418174743652,20 6.12418174743652,8.82655048370361 0,8.82655048370361 4.9995322227478,4.41280698776245 9.99967861175537,0z" />
</AppBarButton.Icon>
</AppBarButton>
</Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" >
<CommandBar VerticalAlignment="Bottom">
<AppBarButton Icon="Add" Label="Add" />
<AppBarButton Icon="Edit" Label="Edit"/>
<AppBarButton Icon="Delete" Label="Delete" />
</CommandBar>
<ListView ItemsSource="{x:Bind Vm.CategoriesList}" ItemTemplate="{StaticResource CategoryTemplate}" SelectedItem="{x:Bind Vm.CurrentCategory, Mode=TwoWay}">
</ListView>
</Grid>
</Page>
代码隐藏
public sealed partial class CategoriesEdit: Page
{
public CategoriesViewModel Vm
{
get
{
return (CategoriesViewModel)this.DataContext;
}
}
public CategoriesEdit()
{
this.InitializeComponent();
}
}
当我做单向时一切正常。但是当我尝试将 SelectedItem 设置为双向绑定时,出现以下错误:
无效的绑定路径'Vm.CurrentCategory':如果没有转换器
,则无法将类型'GJ_2.Domain.Category'绑定到'System.Object'
任何想法都会很棒,目前还没有太多关于这项技术的内容。
我认为在双向绑定中需要一个转换器是合乎逻辑的,因为 SelectedItem 是对象类型,不能分配给 Vm.CurrentCategory
也可以创建该对象或添加转换 to/from 对象并绑定到该对象的助手 属性,或者创建一个转换器并将其作为参数传递给绑定(我猜他们仍然支持这种判断来自错误消息)
我正在尝试使用新的 {x:Bind} 语法设置到 ListView 上 SelectedItem 的两种方式绑定。
查看下面的代码:
XAML
<Page
x:Class="GJ_2.Views.CategoriesEdit"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:GJ_2"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:domain="using:GJ_2.Domain"
mc:Ignorable="d" DataContext="{Binding CategoriesViewModel, Source={StaticResource Locator}}"
>
<Page.Resources>
<DataTemplate x:Key="CategoryTemplate" x:DataType="domain:Category">
<Grid Margin="0,0,0,14">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="50" />
<ColumnDefinition Width="250" />
<ColumnDefinition Width="50" />
<ColumnDefinition Width="50" />
</Grid.ColumnDefinitions>
<Image></Image>
<StackPanel Grid.Column="1">
<TextBlock Text="{x:Bind Title}" FontSize="18.667" FontWeight="Bold" TextWrapping="Wrap" />
<TextBlock Text="{x:Bind Description}" />
</StackPanel>
<SymbolIcon Symbol="Up" Grid.Column="2" ></SymbolIcon>
<AppBarButton Grid.Column="4" Foreground="White">
<AppBarButton.Icon>
<PathIcon HorizontalAlignment="Center" VerticalAlignment="Center" Data="M9.99967861175537,0L15.0010814666748,4.41280698776245 20,8.82655048370361 13.8758192062378,8.82655048370361 13.8758192062378,20 6.12418174743652,20 6.12418174743652,8.82655048370361 0,8.82655048370361 4.9995322227478,4.41280698776245 9.99967861175537,0z" />
</AppBarButton.Icon>
</AppBarButton>
</Grid>
</DataTemplate>
</Page.Resources>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" >
<CommandBar VerticalAlignment="Bottom">
<AppBarButton Icon="Add" Label="Add" />
<AppBarButton Icon="Edit" Label="Edit"/>
<AppBarButton Icon="Delete" Label="Delete" />
</CommandBar>
<ListView ItemsSource="{x:Bind Vm.CategoriesList}" ItemTemplate="{StaticResource CategoryTemplate}" SelectedItem="{x:Bind Vm.CurrentCategory, Mode=TwoWay}">
</ListView>
</Grid>
</Page>
代码隐藏
public sealed partial class CategoriesEdit: Page
{
public CategoriesViewModel Vm
{
get
{
return (CategoriesViewModel)this.DataContext;
}
}
public CategoriesEdit()
{
this.InitializeComponent();
}
}
当我做单向时一切正常。但是当我尝试将 SelectedItem 设置为双向绑定时,出现以下错误:
无效的绑定路径'Vm.CurrentCategory':如果没有转换器
,则无法将类型'GJ_2.Domain.Category'绑定到'System.Object'任何想法都会很棒,目前还没有太多关于这项技术的内容。
我认为在双向绑定中需要一个转换器是合乎逻辑的,因为 SelectedItem 是对象类型,不能分配给 Vm.CurrentCategory
也可以创建该对象或添加转换 to/from 对象并绑定到该对象的助手 属性,或者创建一个转换器并将其作为参数传递给绑定(我猜他们仍然支持这种判断来自错误消息)