对集合的绑定是否会自动将第一个项目用作源?
示例Xaml:
<Window x:Class="ListSelection.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<TextBlock Text="{Binding ColContent}" />
<TextBlock Text="{Binding ItemContent}" />
</StackPanel>
</Window>
和代码:
using System.Collections.Generic;
using System.Windows;
namespace ListSelection
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new MyCol("col 1")
{
new MyItem("item 1"),
new MyItem("item 2")
};
}
}
public class MyItem
{
public string ItemContent { get; set; }
public MyItem(string content)
{
ItemContent = content;
}
}
public class MyCol : List<MyItem>
{
public string ColContent { get; set; }
public MyCol(string content)
{
ColContent = content;
}
}
}
用户界面显示:
col 1
第1项
第二个绑定隐含地将第一个集合项作为源!那么bug,功能还是打算?
编辑:.net 4.5,VS2012,更正
编辑2: 我与配偶一起进一步研究了这个问题并且更接近解决方案:
<Window x:Class="ListSelection.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<StackPanel>
<ListView ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True">
<ListView.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ItemContent}" />
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<TextBlock Text="{Binding ItemContent}" />
</StackPanel>
</Window>
- 让我们调用它 - 主要细节视图似乎存在魔术绑定。默认情况下,任何绑定的集合都会获得一个CollectionView - 它提供了一个选定的项属性(以及排序等其他很酷的东西)。此选定项目可用于详细视图的快捷方式。如果IsSynchronizedWithCurrentItem设置为true,则快捷方式绑定会对更改的选择作出响应。整个事情中的问题:CollectionView的选定项目总是设置为导致魔术绑定的第一个项目...我会称之为一个错误,它应该只能明确地工作,例如通过将集合绑定到Selector并设置IsSynchronizedWithCurrentItem。