繁体   English   中英

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

[英]How do I specify a DataGrid's ItemsSource type in XAML?

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

换个问题:换句话说,是否有“广播” XAML中的数据绑定?

我以为我可以使用<DataGrid.DataContext>做些什么,但我不记得它是什么,也没有运气来搜索一下:

XAML:

<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>

背后的代码:

public partial class MainWindow : Window, INotifyPropertyChanged
{
    public ICollectionView MyCollectionView { get; set; }

    public MainWindow(List<MyType> parameter)
    {
        // ...

        MyCollectionView = new CollectionView(parameter);

        // ...
    }
}

public class MyType
{
    public bool Approved { get; set; }

    // ...
}

我以为可以做些什么,但我不记得它是什么,也没有运气来找它:

我相信设置设计时间数据上下文是您要寻找的。 请参考以下链接以获取更多信息。

XAML:绑定和数据上下文的智能感知: https : //blogs.msmvps.com/deborahk/xaml-intellisense-for-bindings-and-the-data-context/ 如何在XAML编辑器中查看设计时数据绑定(它在运行时有效)?

我想问的是,是否有任何方法可以将数据绑定“投射”为XAML中的MyType集合?

否。但是您可以如上所述指定设计时DataContext。

VisualStudio无法确定类型是什么

由于类型直到运行时才表达出来,并通过代码的反射来获取,因此设计者处于不利地位,只能对其了解的内容进行推断。 它所知道的只是它是一个object而不是开发人员知道的确切类型。

我没有得到任何IntelliSense帮助...仍在构建和运行,但在设计时却没有得到帮助

如果那是使您退缩的问题,建议您将有问题的属性类型的列表临时添加到VM(如果不是MVVM,则添加页面),然后绑定到该新属性。 然后,设计的时候会看到它需要什么,你可以得到属性信息添加绑定/风格与Visual Studio的帮助。

一旦一切顺利,就将设计时绑定替换为您提到的ICollection

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM