2010-03-16 56 views
3

你們如何將數據(參數)傳遞給DataTemplate選擇器?將數據傳遞給數據模板選擇器

我能想到的唯一一個是在DataTemplate Selector中使用附加屬性?

例子:

public class DisableWeekendsSelection : DataTemplateSelector 
    { 
     [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2211:NonConstantFieldsShouldNotBeVisible", Justification = "DependencyProperty")] 
     public static readonly DependencyProperty Parameter = 
      DependencyProperty.RegisterAttached("Parameter", typeof(ObservableCollection<Date>), typeof(DisableWeekendsSelection), 
      new FrameworkPropertyMetadata(null, 
       FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 

     public static ObservableCollection<Date> GetParameter(DependencyObject dp) 
     { 
      return dp.GetValue(Parameter) as ObservableCollection<Date>;    
     } 

     public static void SetParameter(DependencyObject dp, ObservableCollection<Date> value) 
     {    
      dp.SetValue(Parameter, value); 
     } 

     public override DataTemplate SelectTemplate(object item, DependencyObject container) 
     { 

這種方法的問題是,我沒能得到SelectTemplate方法參數的值。

任何建議,將不勝感激。提前致謝。

回答

0

解決辦法

  1. 使用附加屬性和私有靜態變量

  2. 走可視化樹doc.OfParentType <>

0

通常的解決方案是使用item參數的屬性來獲取所需的信息以選擇正確的模板。

如果您有ViewModel,它可以包含必要的數據。

+0

我有日期財產和節假日物業。 DatePicker綁定了Date。我需要在DatePicker的日曆中突出顯示假期。這就是爲什麼林嘗試將虛擬機假期傳遞給數據模板選擇器。 – 2010-03-17 00:09:10

+0

我總是得到空,如果我把這一行var日期= container.GetValue(參數)作爲ObservableCollection ;在SelectTemplate中。 :( – 2010-03-17 07:11:11

+0

你可以在telerik:RadDatePicker中顯示如何設置數據模板選擇器? – Timores 2010-03-17 07:29:11

3

這是一個相當容易一點。在處理程序中:

SelectTemplate(object item, DependencyObject container) 

容器位於邏輯樹中。您可以遞增樹來訪問您的UserControl,然後您可以訪問該控件屬性和DataContext。就像這樣:

public override DataTemplate SelectTemplate(object item, DependencyObject container) 
{ 
    var _Container = Library.TreeHelper.TryFindParent<MyUserControl>(container); 

這裏的輔助方法:http://www.hardcodet.net/2009/06/finding-elements-in-wpf-tree-both-ways