Элемент привязки ICollectionView Wpf не может разрешать свойство объекта типа
Я связал a GridView
с ICollectionView
в дизайне XAML, свойства неизвестны, поскольку объект в CollectionView
был преобразован в тип Object
, и свойства объекта не могут быть доступны, он отлично работает без ошибок, но дизайнер показывает это как ошибку, если я привяжусь к коллекции, я могу получить доступ к свойствам fine
Пример: объект Person
с свойством string Name
помещает их в ObservableCollection<Person>
и получаю представление от него и привязываю его к GridView.ItemsSource
теперь, когда я пытаюсь установить заголовок столбца DataMemberBinding.FirstName
конструктор показывает это как ошибку
Невозможно разрешить свойство "FirstName" в данных Контекст объекта типа
Является ли это ошибкой или это решайер играет трюки на мне
Пример кода:
public class Person
{
public string FirstName{
get { return _firstName; }
set { SetPropertyValue("FirstName", ref _firstName, value); }
}
}
public class DataService
{
public IDataSource DataContext { get; set; }
public ICollectionView PersonCollection{ get; set; }
public DataService()
{
DataContext = new DataSource();
//QueryableCollectionView is from Telerik
//but if i use any other CollectionView same thing
//DataContext Persons is an ObservableCollection<Person> Persons
PersonCollection = new QueryableCollectionView(DataContext.Persons);
}
}
<telerik:RadGridView x:Name="ParentGrid"
ItemsSource="{Binding DataService.PersonCollection}"
AutoGenerateColumns="False">
<telerik:RadGridView.Columns >
<telerik:GridViewDataColumn Header="{lex:Loc Key=FirstName}"
DataMemberBinding="{Binding FirstName}"/>
</telerik:RadGridView.Columns>
</telerik:RadGridView>
![enter image description here]()
Ответы
Ответ 1
Предупреждения, которые Resharper дает вам в представлении XAML, связаны с тем, что представление времени разработки элемента управления не знает, какой тип он имеет в контексте данных. Вы можете использовать d: DesignInstance, чтобы помочь с вашими привязками.
Добавьте следующее (заменяя имена объектов Assembly/Namespace/Binding Target)
<UserControl x:Class="MyNamespace.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup‐compatibility/2006"
mc:Ignorable="d"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:lcl="clr‐namespace:MyAssembly"
d:DataContext="{d:DesignInstance Type=lcl:ViewModel}">
Ответ 2
Вы можете создать универсальную версию ICollectionView
и использовать ее для своего свойства PersonCollection
как показано в этом посте https://benoitpatra.com/2014/10/12/a-generic-version-of-icollectionview-used-in-a- mvvm-searchable-list/.