I want to convert the items of a listview with the help of an property in the ViewModel. I didn't get this to work... the column with the converter is empty the convert method is never reached. in the output window is following message:
System.Windows.Data Error: 2 : Cannot find governing FrameworkElement or FrameworkContentElement for target element. BindingExpression:Path=ObjectDefinition; DataItem=null; target element is 'OsGuidToNameConverter' (HashCode=66244779); target property is 'BindableConverterParameter' (type 'XmlDocument')
the ObjectDefinition is filled at runtime after this message appears
What is the best practise to do that
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>
Converter
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 "";
}
}