如何在XAML中指定DataGrid的ItemsSource类型?

时间:2017-01-03 18:59:58

标签: c# wpf xaml data-binding visual-studio-2015

我正在将DataGrid绑定到ICollectionView,以便我可以有效地过滤ItemsSource,但ICollectionView不是generic类型(如{{1} }} - 它的类型为CollectionView<MyType>。因此,在XAML编辑器中,VisualStudio无法确定类型是什么,因此我没有获得任何IntelliSense帮助绑定到集合视图中对象的属性。它仍在构建和运行,但我在设计时没有得到帮助。

改述问题:无论如何在XAML中“强制转换”数据绑定?

我以为我可以用List<object>做点什么,但我不记得它是什么,我也没有任何运气用谷歌搜索:

XAML:

<DataGrid.DataContext>

代码背后:

<DataGrid ItemsSource="{Binding MyCollectionView}">
    <DataGrid.DataContext>
        <!-- Specify the type of objects in MyCollectionView somehow -
                 something like 'x:type="MyType"' -->
    </DataGrid.DataContext>
    <DataGrid.RowStyle>
        <Style TargetType="DataGridRow">
            <Style.Triggers>
                <!-- Cannot resolve property 'Approved' in data context of type 'MyProject.MainWindow'. -->
                <DataTrigger Binding="{Binding Approved}" Value="False">
                    <Setter Property="Background" Value="LightGray" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </DataGrid.RowStyle>
    <DataGrid.Columns>
        <!-- Cannot resolve property 'Approved' in data context of type 'object'. -->
        <DataGridTextColumn Header="Is Approved"
                            Binding="{Binding Approved}"
                            Width="3*" />
    </DataGrid.Columns>
</DataGrid>

2 个答案:

答案 0 :(得分:2)

  

我以为我可以做些什么,但我不记得它是什么,我也没有任何运气谷歌搜索它:

我相信您正在寻找设计时间数据上下文。有关此内容的更多信息,请参阅以下链接。

XAML:绑定的Intellisense和数据上下文:https://blogs.msmvps.com/deborahk/xaml-intellisense-for-bindings-and-the-data-context/ How to see design-time data-binding in XAML editor (it works in runtime)?

  

我想问的是,是否有办法将数据绑定“转换”为XAML中的MyType集合?

没有。但您可以如上所述指定设计时DataContext。

答案 1 :(得分:0)

  

VisualStudio无法确定类型是什么

由于类型直到运行时才表达,并且通过代码使用反射得到,因此设计者处于劣势并且只能根据它所知道的内容进行推断。 知道的所有内容都是object,而不是开发人员知道的完全类型。

  

我没有获得任何智能感知帮助......仍在构建和运行,但我在设计时无法获得帮助

如果这是阻碍您的问题,我建议您暂时将有问题的属性类型列表添加到VM(如果不是MVVM,则为页面),然后绑定到该新属性。然后设计时间它需要什么,你可以在visual studio的帮助下获得属性信息添加绑定/样式。

一旦一切正常,请将设计时绑定原样替换为您提到的ICollection