我在该视图的资源中有一些视图,其中包含几个数据模板。 (我不想把它放在全球某处,因为这个特殊视图只需要它)
基于我在转换器中获得的值,我切换模板。
public class SplitTemplateSelector : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int splitCount = (int)value;
var _view = new IdtDetailView();
DataTemplate template;
if (splitCount == 1)
{
//(DataTemplate)_view.Resources["SingleSplitTemplate"];
template = (DataTemplate)_view.Resources.Where(w => w.Key.Equals("SingleSplitTemplate")).FirstOrDefault().Value;
}
else
{
template = (DataTemplate)_view.Resources.Where(w => w.Key.Equals("MultiSplitTemplate")).FirstOrDefault().Value;
}
return template;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
这是按预期工作的,但是因为我实例化了新的IdtDetailView()
,我遇到了一些问题,其中变量没有正确设置等等。所以我的问题是......
如何传递或访问调用此转换器的视图,以便我不必创建新的IdtDetailView?
答案 0 :(得分:4)
我建议下一个解决方案:
public class SplitTemplateSelector : DependencyObject, IValueConverter
{
public static readonly DependencyProperty SingleSplitTemplateProperty =
DependencyProperty.Register("SingleSplitTemplate",
typeof (DataTemplate),
typeof(SplitTemplateSelector),
null);
public DataTemplate SingleSplitTemplate
{
get { return (DataTemplate) GetValue(SingleSplitTemplateProperty); }
set { SetValue(SingleSplitTemplateProperty, value); }
}
public static readonly DependencyProperty MultiSplitTemplateProperty =
DependencyProperty.Register("MultiSplitTemplate",
typeof (DataTemplate),
typeof(SplitTemplateSelector),
null);
public DataTemplate MultiSplitTemplate
{
get { return (DataTemplate) GetValue(MultiSplitTemplateProperty); }
set { SetValue(MultiSplitTemplateProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
int splitCount = (int)value;
return splitCount == 1 ? SingleSplitTemplate : MultiSplitTemplate;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotSupportedException();
}
}
在XAML中:
<c:SplitTemplateSelector x:Key="SplitTemplateSelector" SingleSplitTemplate="{StaticResource SingleSplitTemplate}" MultiSplitTemplate="{StaticResource MultiSplitTemplate}"/>
如您所知,您可以将转换器放在用户控制资源中的本地数据模板附近
答案 1 :(得分:1)
听起来你需要某种DataTemplateSelector。 不幸的是,这个类只存在于WPF中,但您可以在Web上找到一些替代实现。 例如: http://skysigal.xact-solutions.com/Blog/tabid/427/entryid/1404/Silverlight-a-port-of-the-DataTemplateSelector.aspx
我们的想法是拥有一个包含数据模板数组的内容控件。显示内容的选择基于一个值(在您的情况下,它是一个整数)。