WPF自动绑定到第一个集合项

时间:2014-06-17 14:07:41

标签: wpf collections binding

对集合的绑定是否会自动将第一个项目用作源?

示例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。

0 个答案:

没有答案