2015-07-17 4 views
2

Я думаю, что моя проблема довольно проста, но я не могу найти решение. У меня есть приложение с несколькими возможными видами (User Controls). В HomeView-UserControl Создаю ObservableCollection.WPF: доступ ObservableCollection из разных UserControls

HomeView.xaml.cs:

private ObservableCollection<Food> _foodList = new ObservableCollection<Food>(); 
public ObservableCollection<Food> FoodList 
    { 
     get { return _foodList; } 
     set { _foodList = value; } 
    } 

мне нужно открыть ObservableCollection из моей статистики-UserControl (и других тоже).

Я пробовал много разных подходов líke Команды, сложные DataBinding, создавая ObservableCollection в MainWindow и т. Д., Но я не получил его для работы.

+0

Вы следуете за шаблоном MVVM? Если это так, ваше представление не должно содержать частей модели (просто взгляды на нее), это должно быть в вашей модели просмотра, которая может быть предоставлена ​​с несколькими видами при необходимости ... –

+0

Спасибо, это уже помогло мне. Но что, если я редактирую некоторые поля (например, Observable Collection) в HomeViewModel и хочу, чтобы эти изменения сохранялись, пока я нахожусь в моем SecondView? –

+0

Вы должны иметь возможность передавать данные состояния (данные модели) между представлениями, используя методы, которые вы вызываете для изменения представлений в модели представления. Например, вы можете добавлять параметры во вторую модель представления, которые берут данные из первого представления и проходят в коллекции. Не уверен, что это ясно или нет ... –

ответ

0

Вы уже отслеживаете образец MVVM? Если это так, ваше представление не должно содержать частей модели (только точки зрения для него), это должно быть в вашей модели просмотра, которую можно использовать с несколькими видами, если необходимо ...

Решение должно было иметь несколько представлений используют одни и те же данные.

Кредиты идут в Рон Бейер.

1

Если вы хотите разные виды данных из этих же данных, то вы должны использовать CollectionViewSource.

Например, предположим, что у вас есть два DataGrid s dg1, dg2, и ObservableCollectionoc ... вы можете написать ...

cvs1 = new CollectionViewSource(); 
cvs1 .Source = oc; 
cvs1.View.Filter = Filter1; 
dg1.ItemsSource = cvs1.View; 

cvs2 = new CollectionViewSource(); 
cvs2 .Source = oc; 
cvs2.View.Filter = Filter2; 
dg2.ItemsSource = cvs2.View; 

В этом случае Filter1 и Filter2 являются функциями, которые возвращают true когда объект привязывает критерии фильтра ... Например:

private bool Filter1(object o) 
{ 
    \\return true if o has correct properties 
} 
Смежные вопросы