WPF ListBox ItemsSource StaticResource/绑定问题

发布于 2024-08-04 21:35:21 字数 1409 浏览 5 评论 0原文

给出以下代码:

<Window x:Class="WpfApplication76.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <CollectionViewSource x:Key="myCol">
            <CollectionViewSource.Source>
                <col:ArrayList>
                    <ListBoxItem>Uno</ListBoxItem>
                    <ListBoxItem>Dos</ListBoxItem>
                    <ListBoxItem>Tres</ListBoxItem>
                </col:ArrayList>
            </CollectionViewSource.Source>
        </CollectionViewSource>
    </Window.Resources>

    <Grid>
        <ListBox ItemsSource="{StaticResource myCol}" />
        <ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />
    </Grid>

</Window>

在此示例中,

<ListBox ItemsSource="{StaticResource myCol}" />

给我一个错误,抱怨它无法绑定到“CollectionViewSource”对象。

但另一个列表框:

<ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />

绑定得很好。

所以我的问题是为什么一个有效而另一个无效?最后,两个 ItenSource 不是都设置为同一个“CollectionViewSource”对象吗?

谢谢。

Given the following code:

<Window x:Class="WpfApplication76.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:col="clr-namespace:System.Collections;assembly=mscorlib"
    Title="Window1" Height="300" Width="300">

    <Window.Resources>
        <CollectionViewSource x:Key="myCol">
            <CollectionViewSource.Source>
                <col:ArrayList>
                    <ListBoxItem>Uno</ListBoxItem>
                    <ListBoxItem>Dos</ListBoxItem>
                    <ListBoxItem>Tres</ListBoxItem>
                </col:ArrayList>
            </CollectionViewSource.Source>
        </CollectionViewSource>
    </Window.Resources>

    <Grid>
        <ListBox ItemsSource="{StaticResource myCol}" />
        <ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />
    </Grid>

</Window>

In this example, the

<ListBox ItemsSource="{StaticResource myCol}" />

Gives me an error complaining that it cannot bind to a "CollectionViewSource" object.

But the other listbox:

<ListBox ItemsSource="{Binding Source={StaticResource myCol}}" />

binds perfectly fine.

So my question is why does one work and the other one does not? AT the end, aren't both ItenSources being set to the same "CollectionViewSource" object?

Thank you.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

迷雾森÷林ヴ 2024-08-11 21:35:21

ItemsSource 属性的类型为 IEnumerable。 CollectionViewSource 不是 IEnumerable。 CollectionViewSource 的 View 属性将为您提供一个 IEnumerable。

当您绑定到 CollectionViewSource 时,绑定足够智能,可以获取 View 属性并实际绑定到该属性。也许 CollectionViewSource 上有一个 [DefaultBindingProperty] 。

归根结底,当您执行 Binding 时,您实际上并没有绑定到 CollectionViewSource,而是绑定到它的 View 属性。

The ItemsSource property is of type IEnumerable. A CollectionViewSource is not an IEnumerable. CollectionViewSource's View property will give you an IEnumerable.

When you Bind to a CollectionViewSource the Binding is smart enough to grab the View property and actually bind to that. Maybe CollectionViewSource has a [DefaultBindingProperty] on it.

It boils down to the fact that when you go through the Binding you don't actually bind to the CollectionViewSource, but its View property.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文