2014-12-03 65 views
0

我有一個由項目填充的列表框。每個項目包含一個對象如下:根據數據不同的列表框項目樣式WP 8.1

public Contact(int idContact, string pseudo, string prenom, string nom, string numero, bool isOuter) 
    { 
     this.IdContact = idContact; 
     this.Pseudo = pseudo; 
     this.Prenom = prenom; 
     this.Nom = nom; 
     this.NumerosTel = numero; 
     this.IsOuter = isOuter; 
    } 

現在我想根據IsOuter值到不同的樣式應用到這些項目,因爲它是一個布爾值。我聽說過DataTemplateSelector但無法真正弄清楚它是如何工作的....有人可以告訴我該怎麼做嗎?

回答

1

首先,您創建一個DataTemplateSelector這樣的:

public class MyTemplateSelector : DataTemplateSelector { 
    protected override DataTemplate SelectTemplateCore(object item, DependencyObject container) { 
     var contact = (Contact)item; 

     if (contact.IsOuter == true) { 
      return (DataTemplate)Application.Current.Resources["DataTemplate1Name"]; 
     } else { 
      return (DataTemplate)Application.Current.Resources["DataTemplate2Name"]; 
     } 
    } 
} 

在這段代碼中,的DataTemplates應在App.xaml中。基本上,該方法必須將您想要的DataTemplate作爲DataTemplate對象返回。你將如何得到這個對象完全取決於你。

,你需要設置ListBox這樣的ItemTemplateSelector

​​

就是這樣。現在不同的項目將有不同的模板,基於IsOuter屬性。

的幾點思考

您可能希望有更多的可重複使用的模板選擇。例如,您可能有一個接口,其中一個DataTemplate屬性,在SelectTemplateCore中檢查項目是否實現接口,如果是 - 返回該屬性的值。

無論如何,上面的代碼現在應該可以工作,如果將來需要更多的代碼,你會找出最方便的方式來編寫/使用它們。 :)

+0

感謝您的答案和建議!根據上面的代碼,作爲資源,我需要在我的頁面資源中有2個名爲DataTemplate1和DataTemplate2的DataTemplate正確嗎? – 2014-12-03 19:27:54

+1

我修改了一下我的答案。您應該將這兩個模板放在App.xaml中,或調整代碼以獲取當前頁面的資源,或者將兩個模板的屬性添加到MyTemplateSelector類中,並在創建實例時對其進行設置。但App.xaml是最簡單的。 :) – yasen 2014-12-03 19:45:05

+0

非常感謝!很好的答案!它效果很好:) – 2014-12-03 20:50:16

相關問題