Привязка к коллекциям ViewModels или бизнес-моделей? - PullRequest
0 голосов
/ 14 декабря 2011

, пожалуйста, помогите мне лучше понять MVVM:

Я связывал списки со списками пользовательских объектов, но затем я столкнулся с некоторыми проблемами, связанными с тем, чтобы выбранные элементы правильно заполняли / связывали в списке множественного выбора.

Решение, которое я нашел, использовало List только для этого списка (или, по крайней мере, это то, что я понял), и тогда класс viewmodel мог иметь свойство IsSelected, что мне помогло.

Мои вопросы таковы: это обычное явление для привязки списка к списку моделей представлений? Это кажется странным, и если это нормально, связывает ли список со списком бизнес-объектов плохую технику MVVM?

Наконец, когда я связываю список со списком моделей представления, как обычно они связаны со списком бизнес-объектов, которые они представляют? сохранить идентификатор в модели представления или ссылку на сам бизнес-объект? Извините за эти вопросы, но я пытаюсь выучить MVVM и делаю это правильно.

вот модель представления, которую я помещаю в список и привязываю к списку:

class ItemViewModel
{
    public ItemViewModel(string name)
    {
        Name = name;
    }

    public string Name { get; private set; }

    bool isSelected;
    public bool IsSelected
    {
        get { 
            return isSelected; 
        }
        set { 
            isSelected = value; 
        }
    }
}

вот xaml для списка в представлении

<ListBox Height="401" ItemsSource="{Binding Path=Users}" ItemTemplate="{StaticResource listBoxTemplate}" SelectionMode="Multiple"  HorizontalAlignment="Left" Margin="202,29,0,0" Name="lbxAuthorizedUsers" VerticalAlignment="Top" Width="154" >
    <ListBox.ItemContainerStyle>
        <Style TargetType="{x:Type ListBoxItem}">
            <Setter Property="IsSelected" Value="{Binding Mode=TwoWay, Path=IsSelected}"/>
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>`

а вот свойство Users в модели представления

public List<ItemViewModel> Users
{
    get { return this.users; }
    set { this.users = value; }
}

Ответы [ 2 ]

1 голос
/ 14 декабря 2011

То, что у тебя, кажется, прекрасно

Идея шаблона проектирования MVVM состоит в том, чтобы отделить уровень пользовательского интерфейса от уровня бизнес-логики. Идеальное приложение MVVM может работать с любым пользовательским интерфейсом (или вообще без него), поэтому, если у вас есть какая-то бизнес-логика, основанная на выбранных пользователях, то у вас должна быть коллекция SelectedUsers на вашей ViewModel или IsSelected собственности на ваш объект пользователя.

В качестве примечания: если вы хотите, чтобы WPF автоматически обновлял свой пользовательский интерфейс при изменении свойства в ваших моделях ViewModel или моделях, убедитесь, что они реализуют INotifyPropertyChanged . И если вы хотите, чтобы они автоматически обновлялись при изменении коллекции, обязательно используйте ObservableCollection вместо List

Я начал изучать MVVM с этой статьи Джоша Смита , которая является отличным введением в шаблон проектирования, хотя, когда я только начинал, мне было трудно понять его. Если вы ищете что-то более простое, вы можете проверить простой пример MVVM Я написал

1 голос
/ 14 декабря 2011

Кроме того, ваша ViewModel должна реализовывать INotifyPropertyChanged, чтобы он мог уведомлять View о любых изменениях.

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