2013-06-05 3 views
3

У меня возникает следующий вопрос: каков ожидаемый сценарий для логики, когда я хочу привязать некоторые элементы внутри ViewModel в отдельности. Что я имею в виду ... http://slodge.blogspot.co.uk/2013/04/n3-kitten-cells-on-iphone-n1-days-of.htmlMvvmCross: ViewModel внутри другого сценария ViewModel

В представленном образце есть класс «Котенок» - это обычный объект «DTO». А также есть класс, который содержит вид модели этого список объектов:

public List<Kitten> Kittens 
{ 
    get ... 
    set { ... RaisePropertyChanged(() => Kittens); } 
} 

Мы можем связать сетку с ячейками (которые связаны со свойствами Kitten). Но что, если бы я хотел бы активировать RaisePropertyChanged по каждому свойству Котенка отдельно? I.e., , если название котенка изменилось, затем вызвать RaisePropertyChanged (и, соответственно, изменить только связанное значение ячейки вместо полного обновления списка) на свойство KittenTitle (например)?

Образец с котятами, очевидно, примитивен и не нуждается в такой реализации, но что, если вместо котят у меня будет список, похожий на панель меню Facebook App, где есть пункты меню (количество которых может варьироваться) и те элементы могут иметь метку «Notifications Count» (или не могут), поэтому вместо полного обновления списка, как я могу инициировать обновление только этого ярлыка (вызванное связанным свойством внутри экземпляра «Котенок»)? (Это выглядит как viewModel внутри viewModel для меня, но не уверен, как его решить умнее с MvvmCross).

Спасибо!

ответ

2

Вы можете реализовать объекты Nested INotifyPropertyChanged - точно так же, как и при привязке Windows.

Так что, если один Котик повышает его свойство, то изменяется только та часть пользовательского интерфейса для этого котенка освежит

например Котенком может быть записано:

public class DynamicKitten : MvxNotifyPropertyChanged // can use MvxViewModel as base class if preferred 
{ 
    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     set { _name = value; RaisePropertyChanged(() => Name); } 
    } 
} 

Для некоторых примеров этого - в основном с помощью Linq, чтобы обернуть статические объекты - см:

Один из моих любимых te библиотеки StackOverflow приняли этот подход INPC полностью назад к слою Json - взгляните на все объекты INPC в https://stacky.codeplex.com/SourceControl/latest#trunk/source/Stacky/Entities/Answer.cs

+0

Или вы хотите привязать объект «Kitten» непосредственно к представлению (которое я создал для этого объект (например, tablecell)) дополнительно к привязке KittenTitle? – Agat

+0

К сожалению, пропущено редактирование ответа. То, что я действительно спрашиваю, как следует привязывать в таком сценарии. Пока я свяжу коллекцию «Котята», а затем «Kitten.Title», но MvxNotifyPropertyChanged будет вызываться на «Kitten». Должен ли я добавить еще несколько привязок для него (к представлению, созданному мной на основе «Котенок»), или этого должно быть достаточно? – Agat

+0

попробуйте - вы скоро получите его повесить :) – Stuart

Смежные вопросы