我想借助ViewModel中的属性转换列表视图的项目。 我没有让它工作......带转换器的列是空的 永远不会达到转换方法。在输出窗口中显示以下消息:
System.Windows.Data错误:2:找不到管理FrameworkElement 或目标元素的FrameworkContentElement。 BindingExpression:路径= ObjectDefinition;的DataItem = NULL;目标要素 是'OsGuidToNameConverter'(HashCode = 66244779);目标属性是 'BindableConverterParameter'(输入'XmlDocument')
在此消息出现后,运行时填充ObjectDefinition
这样做的最佳做法是什么
XAML
<Window.Resources>
<ResourceDictionary>
<local:OsGuidToNameConverter x:Key="formatter" BindableConverterParameter="{Binding Path=ObjectDefinition}" />
</ResourceDictionary>
</Window.Resources>
<ListView Grid.Row="2" Name="listView1" ItemsSource="{Binding Path=Config.DocumentTypes}">
<ListView.View>
<GridView>
<GridViewColumn Width="140" Header="Objekttyp" DisplayMemberBinding="{Binding ObjektTyp}" />
<GridViewColumn Width="140" Header="Bezeichnung">
<GridViewColumn.DisplayMemberBinding>
<Binding Path="Value" Converter="{StaticResource formatter}" />
</GridViewColumn.DisplayMemberBinding>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
转换器
public class OsGuidToNameConverter : DependencyObject, IValueConverter
{
public static DependencyProperty BindableConverterParameterProperty =
DependencyProperty.Register("BindableConverterParameter", typeof(XmlDocument),
typeof(OsGuidToNameConverter));
public XmlDocument BindableConverterParameter
{
get { return (XmlDocument)GetValue(BindableConverterParameterProperty); }
set { SetValue(BindableConverterParameterProperty, value); }
}
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
if (BindableConverterParameter is XmlDocument)
{
try
{
FieldParameter definitionForField = (FieldParameter)ObjectDefinitionHelper.GetObjectDefinitionByAttribute((string)value, SuchFeldTypes.osguid, BindableConverterParameter, SuchFeldTypes.name);
return definitionForField.Value;
}
catch (Exception e)
{
Console.WriteLine(e);
return "";
}
}
else
{
return "";
}
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return "";
}
}
答案 0 :(得分:1)
您的问题出在错误消息
中System.Windows.Data错误:2:找不到管理FrameworkElement 或目标元素的FrameworkContentElement。 BindingExpression:路径= ObjectDefinition;的的DataItem =空强>;目标要素 是'OsGuidToNameConverter'(HashCode = 66244779);目标属性是 'BindableConverterParameter'(输入'XmlDocument')
转化器后面的DataContext
(DataItem
)为null
,因此无法找到属性"ObjectDefinition"
。
尝试将转换器移至<GridViewColumn.Resources>
,使其具有正确的DataContext
绑定,或切换到IMultiValueConverter,以便传递多个绑定值。
第三种方法也是使用Converter
将整个数据项传递给{Binding }
,然后将其转换为您的数据类型,然后您就可以访问Value
和{{1它的属性来执行转换。