在不使用资源的情况下使用Binding.Source

时间:2012-02-09 14:57:30

标签: wpf

我已经得到了以下适用的代码:

<Viewbox.Resources>
    <CollectionViewSource x:Key="viewSource"
                          Source="{Binding Path=SelectionList}">
        <CollectionViewSource.SortDescriptions>
            <scm:SortDescription PropertyName="Description" />
        </CollectionViewSource.SortDescriptions>
    </CollectionViewSource>

</Viewbox.Resources>
<ComboBox ItemsSource="{Binding Source={StaticResource ResourceKey=viewSource}}"/>

我想将CollectionViewSource直接放在我的ComboBox中,而不使用任何类似的资源:

<ComboBox SelectedItem="{Binding Path=Value, Mode=TwoWay}">
    <ComboBox.ItemsSource>
        <Binding>
            <Binding.Source>
                <CollectionViewSource Source="{Binding Path=SelectionList}">
                    <CollectionViewSource.SortDescriptions>
                        <scm:SortDescription PropertyName="Description" />
                    </CollectionViewSource.SortDescriptions>
                </CollectionViewSource>
            </Binding.Source>
        </Binding>
    </ComboBox.ItemsSource>
</ComboBox>

但是这样我的ComboBox总是空的,我得到以下绑定错误:

  

System.Windows.Data错误:2:找不到管理FrameworkElement   或目标元素的FrameworkContentElement。   BindingExpression:路径= SelectionList;的DataItem = NULL;目标元素是   'CollectionViewSource'(HashCode = 1374711);目标属性是'来源'   (输入'对象')

有谁知道我该怎么做?

2 个答案:

答案 0 :(得分:2)

Nicolas,虽然这不是你问题的答案,因为它仍然使用资源,你可以通过在本地资源字典中定义CollectionViewSource来将它放在ComboBox中:

<ComboBox>
    <ComboBox.Resources>
        <CollectionViewSource x:Key="viewSource" Source="{Binding Path=SelectionList}">
            <CollectionViewSource.SortDescriptions>
                <scm:SortDescription PropertyName="Description" />
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
    </ComboBox.Resources>
    <ComboBox.ItemsSource>
        <Binding Source="{StaticResource viewSource}"/>
    </ComboBox.ItemsSource>
</ComboBox>

答案 1 :(得分:1)

您收到错误是因为CollectionViewSource没有父级可以继承DataContext以在绑定中使用。

您不需要为您的ComboBox使用CollectionViewSource。您可以通过绑定ItemsSource属性

将其项目源绑定到任何集合
<ComboBox ItemsSource="{Binding SelectionList}"
          SelectedItem="{Binding Path=Value, Mode=TwoWay}" />

唯一缺少的是排序,但是您可以在将ViewModel中的数据返回到View之前对其进行排序。