我发现了以下错误:
Windows.UI.Xml.Controls.ListView类型的对象无法转换为System.Windows.DependencyObject类型
由于以下代码:
<ListView Grid.Row="1" ItemsSource="{Binding Cases}" IsItemClickEnabled="False" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Subject}" HorizontalAlignment="Left"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ListView>
我将EventTrigger添加到名称空间中,如下所示:
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
我通过从C:\Program Files (x86)\Microsoft SDKs\Expression\Blend\.NETFramework\v4.5\Libraries\System.Windows.Interactivity.dll
手动添加引用,将“交互”添加到项目中。
当然删除<i:Interaction.Triggers>
块会消除错误,但我需要将选择绑定到命令,就像我在UIKit和Android中那样。
那么 - 这是什么样的魔鬼?
答案 0 :(得分:0)
问题是此代码与Windows Phone 8.1不兼容。
列表视图需要像这样设置:
<ListView Grid.Row="1" ItemsSource="{Binding Cases}" IsItemClickEnabled="False" SelectionMode="Single">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<TextBlock Text="{Binding Subject}" HorizontalAlignment="Left"></TextBlock>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SelectionChanged">
<core:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
</ListView>
需要添加对Behaviors
库的引用,而不是Windows.Interaction。
上述代码在根节点上需要以下属性:
xmlns:interactivity="using:Microsoft.Xaml.Interactivity"
xmlns:core="using:Microsoft.Xaml.Interactions.Core"
这导致另一个问题; 虽然它将绑定到ShowCaseCommand,但它将传递SelectionChangedEventArgs的实例,而不是选定的列表项。
我们使用CommandParameter
来解决此问题。
我们向ListView
添加了一个属性,就像这样 - <ListView Name='listView' ...
- 此名称允许我们稍后引用它:
<interactivity:Interaction.Behaviors>
<core:EventTriggerBehavior EventName="SelectionChanged">
<core:InvokeCommandAction Command="{Binding ShowCaseCommand, Mode=OneWay}" CommandParameter="{Binding ElementName=listView, Path=SelectedItem}" />
</core:EventTriggerBehavior>
</interactivity:Interaction.Behaviors>
通过像这样指定命令参数,我们可以将所选项目作为参数传递,使其与iOS中使用的相同类型的选择命令兼容。