我有以下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/