2014-02-13 31 views
0

我正在寫windows phone 8使用MVVM模式的聊天應用程序。我的問題是通知LongListSelector哪一組ObservableCollection項目正在改變。 好的一步一步:PropertyChanged與TemplateSelector和分組ListList對象在LongListSelector問題

的分組聯繫人列表是一個對象

public ObservableCollection<Group<ContactModel>> GroupedContacts

其中組是:

public class Group<T> : ObservableCollection<T> 
{ 
    public Group(string name, IEnumerable<T> items) 
    { 
     this.Key = name; 
     foreach (T item in items) 
     { 
      this.Add(item);     
     } 
    } 

    public string Key 
    { 
     get; 
     set; 
    } 
} 

然後我加入兩種grups的那個對象:

private void CreateGroups() 
{ 
    var group = new Group<ContactModel>("Online", new ObservableCollection<ContactModel>()); 
    GroupedContacts.Add(group); 
    group = new Group<ContactModel>("Offline", new ObservableCollection<ContactModel>()); 
    GroupedContacts.Add(group); 
} 

添加了一些ContactModel將對象分配給每個組我將它綁定到我的LongListSelector當屬性OnlineContactModel正在更改時,我將該對象從一個組移動到另一個 - 這可以毫無問題地工作。問題是我的TemplateSelector不改變ContentTemplate

TemplateSelector:

public class AvailabilityTemplateSelector : ContentControl 
{ 
    public DataTemplate OnlineTemplate { get; set; } 
    public DataTemplate OfflineTemplate { get; set; } 
    protected override void OnContentChanged(object oldContent, object newContent) 
    { 
     base.OnContentChanged(oldContent, newContent); 
     var contact = newContent as ContactModel; 
     if (contact.Online) 
     { 
      ContentTemplate = OnlineTemplate; 
     } 
     else 
     { 
      ContentTemplate = OfflineTemplate; 
     } 
    } 
} 

我覺得這裏的問題是,我是從一組移動對象到另一個。 GroupedContacts屬性並不意味着屬性已經改變。 ObservableCollection是在屬性GroupedContacts這樣做,但它不是我的LongListSelectorContent。任何想法如何從ObservableCollection「告訴」給已被更改設置,然後從GroupedContactsGroupedContacts財產我LongListSelector

+0

經過一番調試後,我發現notyfing運行良好,問題出現在另一個地方。其他內容項目將轉到TemplateSelector,而不是已更改的內容項目。 – Grzesiu

回答

0

我做了Converter代替TemplateSelector,一切都在這一刻工作的罰款。我需要執行INotifyPropertyChanged到我的ContactModel類,以確保佈局的更改將「實時」。

0

就有了一切錯在你的榜樣。

您的ContentControl知道您的模型。這是WPF不行!

Bty如果你想聽內容的變化你不應該寫一個自定義控件,而是你應該用戶DataTemplateSelector。

http://msdn.microsoft.com/en-us/library/system.windows.controls.datatemplateselector(v=vs.110).aspx

+0

我不能使用它,因爲它不能在Windows Phone平臺上訪問。 – Grzesiu

+0

實際上,正如我在寫之前我試圖瞭解爲什麼不同的內容獲取到OnContentChanged方法,而不是實際上已更改的ContactModel。 – Grzesiu

+0

什麼不同的內容?手機也有這樣的事情。 –