我有以下XAML:

<DataGrid ItemsSource="{Binding Path=FilteredPatients}" SelectedItem="{Binding Path=SelectedPatient}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name"
                            Binding="{Binding Path=FormattedName}" />
        <DataGridTextColumn Header="Date of Birth"
                            Binding="{Binding Path=BirthDate} />
        <DataGridTextColumn Header="Gender"
                            Binding="{Binding Path=Gender} />
        <DataGridTextColumn Header="Id"
                            Binding="{Binding Path=Id}" />
    </DataGrid.Columns>
</DataGrid>

Resharper根据父控件的DataContext确定FilteredPatients和SelectedPatient正常。但是,FilteredPatients是ICollectionView,因此Resharper无法确定它包含Patient的实例,该实例具有DataGrid列绑定(bind)中指定的属性。

一切在运行时都可以正常运行,那么如何告诉Resharper FilteredPatients包含的项目类型?

最佳答案

最简单的解决方案是禁用列的Resharper错误,因为此问题不正确:

<!-- ReSharper disable Xaml.BindingWithContextNotResolved -->
<DataGridTextColumn />
<DataGridTextColumn />
<!-- ReSharper restore Xaml.BindingWithContextNotResolved -->

真正的解决方案是使用DataGridTemplateColumn而不是DataGridTextColumn。这使您可以为每个列标识DataTemplate中的DataType,但是需要更多的xaml:
<DataGrid ItemsSource="{Binding Path=FilteredPatients}" SelectedItem="{Binding Path=SelectedPatient}">
    <DataGrid.Columns>
        <DataGridTemplateColumn Header="Name">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate DataType="namespace:Patient">
                    <TextBlock Text={Binding FormattedName} />
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
    </DataGrid.Columns>
</DataGrid>

关于c# - 如何告诉Resharper ICollectionView包含的类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35135569/

10-08 22:26
查看更多