我有一个在Windows8.1中运行良好的Windows8.1应用程序,但是当在Windows 10机器上运行时,我会遇到一个XAML异常,带有未处理的异常消息,“参数不正确”。
当我将调试器类型更改为混合(托管和本机)时,异常消息是"Value不属于预期范围“。
原XAML
<ListView x:Name="myListView"
Grid.Row="3"
Margin="10"
HorizontalAlignment="Center"
VerticalAlignment="Top"
BorderBrush="Gray"
BorderThickness="1"
FontSize="{StaticResource FontSizeMedium}"
ItemsSource="{Binding LookupList}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding DataContext.ColumnWidth, ElementName=myListView}" Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}">
<ListView Name="gridList"
Grid.Row="1"
VerticalAlignment="Top"
FontSize="{StaticResource FontSizeMedium}"
ItemsSource="{Binding ColumnValues}"
SelectedIndex="{Binding DataContext.SelectedIndex,
Mode=TwoWay,
ElementName=myListView}"
SelectionMode="Single">
</ListView>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>如果删除ElementName绑定中的SelectedIndex,列表视图将加载(但没有正确的功能)。
修改后的XAML (加载没有例外,但没有正确的功能)
<ListView x:Name="myListView"
Grid.Row="3"
Margin="10"
HorizontalAlignment="Center"
VerticalAlignment="Top"
BorderBrush="Gray"
BorderThickness="1"
FontSize="{StaticResource FontSizeMedium}"
ItemsSource="{Binding LookupList}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Width="{Binding DataContext.ColumnWidth, ElementName=myListView}" Visibility="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}">
<ListView Name="gridList"
Grid.Row="1"
VerticalAlignment="Top"
FontSize="{StaticResource FontSizeMedium}"
ItemsSource="{Binding ColumnValues}"
SelectedIndex="{Binding DataContext.SelectedIndex,
Mode=TwoWay}"
SelectionMode="Single">
</ListView>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>是否仍然支持以这种方式绑定ElementName,或者是否有其他调试步骤可以产生更多信息?
发布于 2015-12-23 04:13:06
我很惊讶,它甚至在Windows 8.1中工作,因为绑定是不正确的。
这个绑定表达式{Binding DataContext.SelectedIndex, Mode=TwoWay, ElementName=myListView}基本上意味着定位一个名为myListView的控件,然后查找该控件的DataContext (在大多数情况下是ViewModel)的一个名为SelectedIndex的属性。
但实际上,SelectedIndex应该是,即控件的依赖属性。
所以修复很简单-只要去掉DataContext.-
SelectedIndex="{Binding SelectedIndex, Mode=TwoWay, ElementName=myListView}"发布于 2015-12-22 13:36:41
若要访问项目模板的项容器,必须使用RelativeSource查找包含项模板的祖先。
在您的示例中,这意味着定义这种绑定。
SelectedIndex="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, Path=SelectedIndex,Mode=TwoWay}"https://stackoverflow.com/questions/34344476
复制相似问题