我有一个ListView
,同一列中有不同的单元格(使用DataTemplateSelector
实现)。这是一个非常简化的例子:
<ListView ItemsSource="{Binding Items}">
<ListView.Resources>
<l:ResultsSelector x:Key="result1">
<l:ResultsSelector.TemplateResult>
<DataTemplate>
<TextBlock Text="{Binding Result1}"/> <!-- how to make this dynamic? -->
</DataTemplate>
</l:ResultsSelector.TemplateResult>
...
</l:ResultsSelector>
...
</ListView.Resources>
<ListView.View>
<GridView>
<GridViewColumn Header="Result1" CellTemplateSelector="{StaticResource result1}"/>
<!-- would be nice to use same selector for all columns -->
<GridViewColumn Header="Result2" CellTemplateSelector="{StaticResource result2}"/>
<GridViewColumn Header="Result3" CellTemplateSelector="{StaticResource result3}"/>
...
</GridView>
</ListView.View>
</ListView>
视图模型:
private ObservableCollection<Item> _items;
public ObservableCollection<Item> Items
{
get { return _items; }
set
{
_items = value;
OnPropertyChanged();
}
}
public class Item: NotifyPropertyChangedBase
{
public string Result1 {get; set;}
public string Result2 {get; set;}
public string Result3 {get; set;}
...
}
问题: ResultSelector
在所有结果列中都相同(还有其他列),唯一的区别是绑定属性的名称: 对于“Result1”列,它是Result1
、IsResult1
等,对于“Result2”列,则为Result2
、IsResult2
等。
目的: 我希望只定义一次选择器(就像我之前说的那样,这是非常简化的版本,所以复制/粘贴“result1”选择器定义N
次是非常糟糕的选择,特别是如果以后我需要更改什么)并在某种程度上将其用于所有列。
问题: 有没有一种方法来组织动态绑定。在动态下,我的意思是根据列动态解析属性名称。转换器?
UserControl
?有什么想法吗?
TextBlock
。它绑定到Result1
,这里没有问题,并且它显示正确的值。问题是如何避免创建另一个选择器(在 xaml 中定义),在那里同样的TextBlock
将绑定到例如Result2
。 - SinatrResult
值取自Result2
属性。 - Sinatr