我有標記擴展允許我同時使用GridView
中的綁定和單元格模板。它在運行時正常工作,但它在設計時不起作用,想知道是否有任何事情可以解決。我已經測試過返回簡單的字符串,而不是DataTemplate
,只是爲了確保定製標記擴展在設計時能夠正常工作 - 並且工作正常,所以它應該與某個事實相關,即返回DataTemplate
。標記擴展在設計時不起作用
[MarkupExtensionReturnType(typeof(DataTemplate))]
public class TemplateBuilderExtension : MarkupExtension
{
public string Path { get; set; }
public TemplateBuilderExtension() { }
public TemplateBuilderExtension(string path)
{
Path = path;
}
// Here be dirty hack.
internal static string TagPath { get; private set; }
public override object ProvideValue(IServiceProvider serviceProvider)
{
TagPath = Path;
var resourceExt = new StaticResourceExtension("GridViewTextCell");
// This line causes the evaluation of the Tag as the resource is loaded.
var baseTemplate = (DataTemplate)resourceExt.ProvideValue(serviceProvider);
return baseTemplate;
}
}
[MarkupExtensionReturnType(typeof(BindingExpression))]
public class TemplateBuilderTagExtension : MarkupExtension
{
public TemplateBuilderTagExtension()
{
}
public override object ProvideValue(IServiceProvider serviceProvider)
{
return new Binding(TemplateBuilderExtension.TagPath);
}
}
<Window.Resources>
<DataTemplate x:Shared="false" x:Key="GridViewTextCell">
<Border BorderBrush="Blue" BorderThickness="1">
<TextBlock Text="{markupExtensions:TemplateBuilderTag}"></TextBlock>
</Border>
</DataTemplate>
</Window.Resources>
<Grid>
<ListView SelectedIndex="5">
<ListView.View>
<GridView>
<GridViewColumn Header="Id" CellTemplate="{markupExtensions:TemplateBuilder Id}" Width="300"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
更新:我已經簡化代碼,以儘可能短,在現實情況下有多個GridView的申請通過,每個網格包含多個列,並且這些列應該重新使用相同的模板,也無法使用DataGrid因性能問題。
我沒有得到這樣的想法呢。你是什麼意思「使用綁定和單元格模板」?你想在你的細胞模板中使用視覺父母的datacontext嗎?然後,您可以採用更簡單的方法 – deafjeff 2014-12-02 10:19:17
事情是,如果您希望使用單元格模板,則需要爲每列定義它,因爲您無法將綁定路徑傳遞給單元格模板。有問題的代碼解決了這個問題。 – Giedrius 2014-12-02 10:59:30
這不是DataTemplate Selector的候選人嗎? – deafjeff 2014-12-02 13:10:53