数据模型:
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 (以重用而不是重复逻辑)并尝试以下操作:
<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 这是简化版,其实标题模板和单元格模板都比较复杂,元素和逻辑也不同。