MVVM - Списки привязки на одной странице / Как настроить модели MainView и ItemView и настроить привязку данных - PullRequest
1 голос
/ 30 января 2011

MVVM Вопрос для Windows Phone

Предположим, вы хотите иметь несколько списков в вашей модели представления и, скажем, создать сводную форму с различным ListBox на каждой панели.В целях иллюстрации, скажем, у нас есть два списка для людей и мест на одной странице, но на разных панелях.(PeopleList и PlacesList)

Как настроить ваши ViewModels.Существует ли одна MainViewModel для каждого списка?Одна MainViewModel с двумя списками?Я хотел бы иметь возможность перейти к соответствующей странице сведений о странице сведений на основе их выбора.

Во-вторых, как связать каждый список со своей моделью представления при загрузке формы.* Моя путаница заключается в том, что примеры, по-видимому, указывают на то, что при загрузке формы вы устанавливаете контекст для одной «статической переменной» и не знаете, как указать другой источник каждого списка.... с вопросами ???

   DataContext = App.ViewModel ;


    public class MainViewModel : INotifyPropertyChanged
    {
        public MainViewModel()
        {
            this.Items = new ObservableCollection<ItemViewModel>();
//?? can you have more than one of these?
        }

//?? should I have Public MainViewModel2() with this.Items = new OC<IVM2>
//...

/// Creates and adds a few ItemViewModel objects into the Items collection.
        /// </summary>
        public void LoadData()
        {
            this.Items.Add(new ItemViewModel() { VAR1 = "X", VAR2 = "Y"}) ;

<Grid x:Name="LayoutRoot" Background="Transparent" >
          <!--Pivot Control-->
        <controls:Pivot x:Name="Pivot" Title="MyApp" DataContext="{Binding}" Loaded="Pivot_Loaded">
            <!--Pivot item one-->

...

  <!--Pivot item two-->
            <controls:PivotItem Header="people">

                <Grid>
                    <ListBox x:Name="PeopleList" Height="442" HorizontalAlignment="Left" Margin="46,68,0,0"  VerticalAlignment="Top" Width="346" ItemsSource="{Binding ItemsA}" SelectionChanged="ListBox1_SelectionChanged" />
                </Grid>

<!--Pivot item three-->
            <controls:PivotItem Header="places">

                <Grid>
                    <ListBox x:Name="PlacesList" Height="442" HorizontalAlignment="Left" Margin="46,68,0,0"  VerticalAlignment="Top" Width="346" ItemsSource="{Binding ItemsB}" SelectionChanged="ListBox2_SelectionChanged" />
            </Grid>

1 Ответ

2 голосов
/ 30 января 2011

Ответы на некоторые вопросы:

Сколько / какие ViewModels?

У вас обязательно должен быть MainViewModel здесь. И тогда этот MainViewModel имеет

  • два свойства типов PeopleListViewModel и PlacesListViewModel, или
  • два списка свойств ObservableCollection<PersonViewModel> и ObservableCollection<PlaceViewModel>. Да, вы можете иметь столько, сколько захотите, но называть их ItemsA и ItemsB не лучший выбор.

В первом варианте создайте 2 представления (UserControls) для хранения списков.

Во втором варианте вы можете использовать ItemsControl и DataTemplate для отображения списков.

И вообще, в MVVM старайтесь избегать SelectedItemChanged и других событий. Вы можете привязать данные (раздел View) к свойству SelectedItem.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...