WPF USERCONTROL DATARSING DATAS THROHS THROHS «Свойство не найдено».C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 WPF USERCONTROL DATARSING DATAS THROHS THROHS «Свойство не найдено».

Сообщение Anonymous »

Я создаю приложение WPF, которое имеет несколько страниц, где отображается листик , перечисляя элементы, которые извлекаются из API. Чтобы сделать его более удобным для пользователя, я хотел бы иметь строку поиска в верхней части этих списков s. Поскольку их 4, я подумал, что создаю UserControl , который можно использовать позже (с помощью шаблона MVVM).
Я хотел очень простую вещь, чтобы дать Usercontrol список элементов, чтобы показать и вернуть выбранный элемент из него - и это. Чтобы достичь этого, я создал DepertiveProperties < /code> в USERCONTROL < /code>, это список элементов и выбранного элемента, и связал их в родительском представлении с свойствами родительского просмотра.

Код: Выделить всё

ListViewWithSearchBar.xaml
:

Код: Выделить всё











< /code>
ListViewWithSearchBar.xaml.cs
:

Код: Выделить всё

public partial class ListViewWithSearchBar : UserControl
{
ListViewWithSearchBar()
{
InitializeComponent();
DataContext = new ListViewWithSearchBarViewModel();
ViewModel = (ListViewWithSearchBarViewModel)DataContext;
}

private ListViewWithSearchBarViewModel ViewModel;

public static readonly DependencyProperty ItemsSourceProperty =
DependencyProperty.Register(nameof(ItemsSource), typeof(IEnumerable), typeof(ListViewWithSearchBar),
new PropertyMetadata(null, OnItemsSourceChanged));

public IEnumerable ItemsSource
{
get => (IEnumerable)GetValue(ItemsSourceProperty);
set => SetValue(ItemsSourceProperty, value);
}

private static void OnItemsSourceChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
if (d is ListViewWithSearchBar control && control.ViewModel is not null)
{
control.ViewModel.ItemsSource = e.NewValue as IEnumerable;
}
}

public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(nameof(SelectedItem), typeof(object), typeof(ListViewWithSearchBar),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault));

public object SelectedItem
{
get => GetValue(SelectedItemProperty);
set => SetValue(SelectedItemProperty, value);
}
}
< /code>
ListViewWithSearchBarViewModel.cs
:

Код: Выделить всё

public class ListViewWithSearchBarViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;

public ICollectionView FilteredItems { get; private set; }

private IEnumerable itemsSource;
public IEnumerable ItemsSource
{
get => itemsSource;
set
{
itemsSource = value;
FilteredItems = CollectionViewSource.GetDefaultView(itemsSource);
FilteredItems.Filter = Filter;
OnPropertyChanged(nameof(FilteredItems));
}
}

private string _searchQuery;
public string SearchQuery
{
get => _searchQuery;
set
{
_searchQuery = value;
OnPropertyChanged(nameof(SearchQuery));
FilteredItems?.Refresh();
}
}

private bool Filter(object item)
{
if (string.IsNullOrWhiteSpace(SearchQuery))
return true;

return item?.ToString()?.IndexOf(SearchQuery, StringComparison.OrdinalIgnoreCase) >= 0;
}

protected void OnPropertyChanged(string name) =>
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
< /code>
Parent xaml
:

< /code>
Parent viewmodel:
public partial class PeopleChooserViewModel : ObservableObject
{
public ObservableCollection People { get; private set; }
[ObservableProperty]
private Person selectedPerson;
}
< /code>

и ошибка, которую я получаю, является: < /p>

Свойство людей, не найденное в объекте типа ListViewWithSearchBarViewModel.

SelectedPerson. /> < /blockquote>
Я попытался создать минимальный пример этого только с кодом, который я предоставил, и он все еще запускается в проблему. < /p>

Подробнее здесь: https://stackoverflow.com/questions/797 ... ound-error
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»