无法使用FindResource找到CollectionViewSource

时间:2014-10-04 17:35:54

标签: c# wpf xaml

在我的XAML代码中,我将CollectionViewSource定义为网格资源:

<Grid.Resources>
        <CollectionViewSource x:Key="AgentsViewSource"
                          Source="{StaticResource Agents}">
            <CollectionViewSource.SortDescriptions>
                <componentModel:SortDescription PropertyName="ID" />
            </CollectionViewSource.SortDescriptions>
        </CollectionViewSource>
</Grid.Resources>

作为一个工具箱的孩子,再次是网格的孩子,我有一个ComboBox应该更改SortDescription

<ComboBox Name="SortOrderBox" ItemsSource="{Binding AvailableProperties}" SelectionChanged="newSortOrder_OnSelectionChanged" Width="130" FontSize="15"/>

后面的代码如下:

private void newSortOrder_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
    {
        var newSortOrder = (string) SortOrderBox.SelectedItem;
        var sortDescription = new SortDescription(newSortOrder, ListSortDirection.Descending);

        var source = (CollectionViewSource) FindResource("AgentsViewSource");

        source.SortDescriptions.Clear();
        source.SortDescriptions.Add(sortDescription);
    }

然而,当我尝试使用FindResource时,我总是得到一个例外。我真的不知道我做错了什么,所以所有的输入都很受欢迎。

1 个答案:

答案 0 :(得分:2)

您正在尝试在window / userControl资源下查找资源。

在网格上设置 x:Name 在网格实例上调用FindResource ,因为它被声明为网格下的资源而不是窗口/用户控件。

<Grid x:Name="grid">
   .....
</Grid>

代码背后:

grid.FindResource("AgentViewSource")