你们如何将数据(参数)传递给DataTemplate Selector?
我唯一能想到的是在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方法中获取Parameter的值。
任何建议都将不胜感激。提前致谢。
答案 0 :(得分: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
答案 1 :(得分:0)
通常的解决方案是使用item参数的属性来获取所需信息以选择正确的模板。
如果您有ViewModel,则可以包含必要的数据。
答案 2 :(得分:0)
变通方法
使用附加属性和私有静态变量
走可视树doc.OfParentType&lt;&gt;