每个人,在WPF应用程序中我都有资源字典,其中定义了很多用于控件和样式的DataTemplates。例如
<DataTemplate x:Key="PriceColumnCellTemplate">
<Grid VerticalAlignment="Center">
<Grid.ColumnDefinitions>
<ColumnDefinition />
</Grid.ColumnDefinitions>
<TextBlock
Text="{Binding Path=PriceQuotation, Mode=OneWay}"
Grid.Column="1"
VerticalAlignment="Center"
Margin="2,0"
/>
</Grid>
</DataTemplate>
在View后面的代码中我必须得到这个数据模板。现在这是以下列方式实现的
private DataTemplate _priceColumnCellTemplate;
private DataTemplate PriceColumnCellTemplate
{
get
{
if (_priceColumnCellTemplate == null)
_priceColumnCellTemplate = (DataTemplate)_applicationResources["PriceColumnCellTemplate"];
return _priceColumnCellTemplate;
}
}
private DataTemplate _priceColumnCellEditingTemplate;
private DataTemplate PriceColumnCellEditingTemplate
{
get
{
if (_priceColumnCellEditingTemplate == null)
_priceColumnCellEditingTemplate = (DataTemplate)_applicationResources["PriceColumnCellEditingTemplate"];
return _priceColumnCellEditingTemplate;
}
}
private DataTemplate _alternativePriceColumnCellTemplate;
private DataTemplate AlternativePriceColumnCellTemplate
{
get
{
if (_alternativePriceColumnCellTemplate == null)
_alternativePriceColumnCellTemplate = (DataTemplate)_applicationResources["AlternativePriceColumnCellTemplate"];
return _alternativePriceColumnCellTemplate;
}
}
为每个DataTemplate创建私有字段,并获取该字段的get值属性。 以同样的方式实施样式。
此代码中的问题是当我需要添加新的DataTemplate时,我应该添加上面的代码来获取此DataTemplate表单资源。
如何重构此代码以避免代码重复,并保存相同的功能,可能存在更灵活的方式从xaml文件中获取资源。
请帮我提一下建议,或者举个例子来说明如何解决这个问题。 提前谢谢!
答案 0 :(得分:1)
DataTemplates或任何资源不需要保存在视图模型后面的代码中。它们可以在DataTemplateSelectors的情况下动态提供,动态选择任何元素的数据模板到它们应用的位置......
这会更好地解决您的问题吗?