Модель данных:
public class Metric
{
public string Name { get; set; }
public bool IsEnabled { get; set; }
}
public class FileItem
{
public string FN { get; set; }
public ObservableCollection<string> Values { get; set; }
}
public class MainViewModel
{
public ObservableCollection<Metric> Metrics { get; set; }
public ObservableCollection<FileItem> FileItems { get; set; }
}
XAML:
<Window.Resources>
<local:ValueConverter x:Key="ValueConverter" />
<DataTemplate x:Key="MetricHeaderTemplate">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
</Window.Resources>
...
<ListView ItemsSource="{Binding FileItems}">
<ListView.View>
<GridViewColumn Header="Path to file" Width="400">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FN}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn HeaderTemplate="{StaticResource MetricHeaderTemplate}" Header="{Binding Metrics[0]}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Values[0], Converter={StaticResource ValueConverter}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn HeaderTemplate="{StaticResource MetricHeaderTemplate}" Header="{Binding Metrics[1]}">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Text="{Binding Path=Values[1], Converter={StaticResource ValueConverter}}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</ListView.View>
</ListView>
Все работает должным образом. Я хотел бы переместить CellTemplate в StaticResources (чтобы повторно использовать, а не дублировать logi c) и попробовать следующее:
<Window.Resources>
<local:ValueConverter x:Key="ValueConverter" />
<DataTemplate x:Key="MetricHeaderTemplate">
<TextBlock Text="{Binding Name}" />
</DataTemplate>
<DataTemplate x:Key="MetricCellTemplate">
<TextBox Text="{Binding Path=., Converter={StaticResource ValueConverter}}"/>
</DataTemplate>
</Window.Resources>
...
<ListView ItemsSource="{Binding FileItems}">
<ListView.View>
<GridViewColumn Header="Path to file" Width="400">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding FN}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn
HeaderTemplate="{StaticResource MetricHeaderTemplate}"
Header="{Binding Metrics[0]}"
CellTemplate="{StaticResource MetricCellTemplate}"
DisplayMemberBinding="{Binding Values[0]}"
/>
<GridViewColumn
HeaderTemplate="{StaticResource MetricHeaderTemplate}"
Header="{Binding Metrics[1]}"
CellTemplate="{StaticResource MetricCellTemplate}"
DisplayMemberBinding="{Binding Values[1]}"
/>
</ListView.View>
</ListView>
К сожалению, не повезло: значение ячейки не отображается. Что мне не хватает?
Спасибо.
PS Это упрощенная версия, на самом деле и шаблон заголовка, и шаблон ячейки более сложны и имеют разные элементы и logi c.