【发布时间】:2019-06-23 12:31:44
【问题描述】:
我想从数据模板中引用我的数据上下文。在 XAML 中它工作正常:我创建了一个从 DataTemplate 内部作为 staticResource 引用的 BindingProxy,因此我可以访问所需的属性。
<UserControl.Resources>
<ResourceDictionary>
<helpers:BindingProxy x:Key="DataContextProxy" Data="{Binding}" />
</ResourceDictionary>
</UserControl.Resources>
<Grid>
<Grid.Resources>
<helpers:ComboBoxPerformanceConverter x:Key="AntriebsArtConverter" LookupDictionary="{Binding Source={StaticResource DataContextProxy}, Path=Data.AntriebsArtenDict }" />
</Grid.Resources>
...
<telerik:RadGridView ItemsSource="{Binding MyItemSource }">
<telerik:RadGridView.Columns>
<telerik:GridViewComboBoxColumn
ItemsSource="{Binding Source={StaticResource DataContextProxy}, Path=Data.AntriebsArten}"
DataMemberBinding="{Binding Fahrzeug.AntriebsArtId}"
SelectedValueMemberPath="AntriebsArtId"
DisplayMemberPath="Bezeichnung">
<telerik:GridViewComboBoxColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Fahrzeug.AntriebsArtId, Converter={StaticResource AntriebsArtConverter}}" />
</DataTemplate>
</telerik:GridViewComboBoxColumn.CellTemplate>
</telerik:GridViewComboBoxColumn>
</telerik:RadGridView.Columns>
...
如果我在代码中尝试相同的操作,除了 LookupDictionary 的绑定之外,我一切都可以正常工作。在这里,我尝试不是从数据网格而是从周围的 UserControl 引用数据上下文。它给了我错误“找不到名称为“DataContextProxy”的资源。关于如何解决这个问题的任何建议?
Private Function CreateDataTemplate(textblockName As String) As DataTemplate
Dim memoryStream As MemoryStream
Dim parserContext As New ParserContext()
Dim xaml = "<DataTemplate xmlns:helpers=""clr-namespace:ViewModel.Helpers;assembly=ViewModel"">"
xaml += "<DataTemplate.Resources>"
xaml += "<helpers:ComboBoxPerformanceConverterVm x:Key=""AntriebsArtConverter"" LookupDictionary=""{Binding Path=Data.AntriebsArtenDict, Source={StaticResource DataContextProxy}}""/>"
xaml += "</DataTemplate.Resources><TextBlock Text=""{Binding Fahrzeug.AntriebsArtId, Converter={StaticResource AntriebsArtConverter}}"" /></DataTemplate>"
memoryStream = New MemoryStream(Encoding.UTF8.GetBytes(xaml))
parserContext.XmlnsDictionary.Add("", "http://schemas.microsoft.com/winfx/2006/xaml/presentation")
parserContext.XmlnsDictionary.Add("x", "http://schemas.microsoft.com/winfx/2006/xaml")
Dim dataTemplate = CType(XamlReader.Load(memoryStream, parserContext), DataTemplate)
Return dataTemplate
End Function
提前感谢您的帮助!
【问题讨论】:
标签: wpf vb.net telerik-grid