TheRedEye Ответов: 2

Должен ли я удалить поля из observablecollection, которые не будут отображаться?


У меня есть список объектов, которые я возвращаю из базы данных. Должен ли я загружать их в два списка - один observablecollection с полями, которые я хочу отобразить, и другой со всеми другими полями, которые не будут показаны. Или я могу просто загрузить все в ObservableCollection и просто не вызывать событие PropertyChanged для свойств, которые не будут отображаться?

(Кстати: я слишком новичок в WPF, чтобы реализовывать шаблон MVVM, так что любые комментарии на основе MVVM, скорее всего, будут потрачены впустую на меня).

Могу ли я быть ленивым и делать это?
{
var Foos = new ObservableCollection<Foo>();
// load Foo items from database
}

class Foo 
{
	public int FooID { get; set;}
	//... plus a bunch of properties I won't be displaying
	
	private string _fooName;
	public string FooName
	{
		get
		{
			return _fooName;
		}
		set
		{
			if (_fooName != value)
			{
				_fooName = value;
				OnPropertyChanged();
			}
		}
	}
	//... plus a bunch more of properties I will be displaying
}


Или я должен повторить себя ради исполнения привязки и сделать это?

{
	var foos = new List<Foo>();
	// load FoosToDisplay from database
	var FoosToDisplay = new ObservableCollection<FooToDisplay>();
	// load FoosToDisplay from foos

}

class Foo
{
	public int FooID { get; set;}
	//... plus a bunch of properties I won't be displaying
	public string FooName { get; set; }
	//... plus a bunch more of properties I will be displaying
}

class FooToDisplay
{
	private string _fooName;
	public string FooName
	{
		get
		{
			return _fooName;
		}
		set
		{
			if (_fooName != value)
			{
				_fooName = value;
				OnPropertyChanged();
			}
		}
	}
	//... plus a bunch more of properties I will be displaying
}


Или FooToDisplay может наследовать от Foo?

Что я уже пробовал:

Я ничего не пробовал. Мне нужен совет, прежде чем я начну.

2 Ответов

Рейтинг:
13

Pete O'Hanlon

Это нормально иметь кучу свойств, которые вы не собираетесь отображать в своем OC, и вы даже можете реализовать INotifyPropertyChanged на них, если захотите. Пока вы не подключите их к XAML, любые изменения свойств будут игнорироваться.


Рейтинг:
0

Kenneth Haugland

Самый простой способ-использовать CollectionViewSource для фильтрации элементов, которые вы не хотите показывать.
Класс CollectionViewSource (System.Окна.Сведения)[^]