У меня есть DataGridTemplateColumn в DataGrid, который выглядит следующим образом:
<DataGridTemplateColumn Width="3*" Header="Item">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding AssetDescriptionID} Converter={StaticResource converter}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox
DisplayMemberPath="Description"
ItemsSource="{Binding Data.AssetDescriptions, Source={StaticResource proxy}}"
SelectedValue="{Binding AssetDescriptionID}"
SelectedValuePath="AssetDescriptionID" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
Я хотел бы использовать многозначный преобразователь для поиска описания актива из другой таблицы по идентификатору описания актива, в этом(вероятно, неправильно) строка:
<TextBlock Text="{Binding AssetDescriptionID} Converter={StaticResource converter}" />
У ViewModel есть открытое свойство, содержащее описания активов:
public IEnumerable<AssetDescription> AssetDescriptions { get; set; }
Где AssetDescription по существу:
public class AssetDescription
{
public int AssetDescriptionID { get; set; }
public string Description { get; set; }
}
ИтакЯ написал этот класс конвертера:
public class AssetDescriptionConverter : FrameworkElement, IMultiValueConverter
{
public IEnumerable<T_AssetDescription> AssetDescriptions
{
get { return (IEnumerable<T_AssetDescription>)GetValue(AssetDescriptionsProperty); }
set { SetValue(AssetDescriptionsProperty, value); }
}
public static readonly DependencyProperty AssetDescriptionsProperty =
DependencyProperty.Register("AssetDescriptions", typeof(IEnumerable<T_AssetDescription>), typeof(AssetDescriptionConverter));
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
var items = values as IEnumerable<T_Asset>;
if (items != null)
var item = items.FirstOrDefault(x => x.AssetDescriptionID == (int)parameter);
return item == null ? string.Empty : item.Description;
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
Но я не могу понять, как объявить этот ресурс в XAML, а затем связать его с моим TextBlock.