Я привязка DataGrid
к ICollectionView
, так что я могу эффективно фильтровать ItemsSource, но ICollectionView
не generic типа (как в CollectionView<MyType>
) - это типа List<object>
. Поэтому в редакторе XAML VisualStudio не может определить, что такое тип, поэтому я не получаю никакой привязки IntelliSense к свойствам объекта в представлении коллекции. Он по-прежнему работает и работает, но я не получаю помощь во время разработки.Как указать тип ItemsSource DataGrid в XAML?
Переформулировка вопроса: Есть ли способ «привязать» привязку данных в 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>
Код Behind :
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; }
// ...
}
Вы сделали случай, почему он не работает во время разработки, но вы говорите, что привязка не работает во время выполнения, когда она должна работать? – OmegaMan
«ICollectionView не является общим типом - он имеет тип List
@OmegaMan Нет, он все еще строит и работает. Мой вопрос заключается в том, как указать во время разработки, что 'ItemsSource' на самом деле' List ', а не' List '- получение всей совершенности IntelliSense и проверки подлинности. Я обновил свой вопрос, чтобы ответить на ваш комментарий. –
tehDorf