我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
对于所有结果列都是相同的(还有其他列),唯一的区别是绑定属性的名称:对于列&#34; Result1&#34 ;它的Result1
,IsResult1
等等,&#34;结果2&#34; - Result2
,IsResult2
等
目标:我只想定义一次选择器(如前所述,这是非常简化的版本,因此复制/粘贴&#34; result1&#34;选择器定义{ {1}}次是非常糟糕的选择,特别是如果我必须稍后更改某些内容)并以某种方式将其用于所有列。
问题:有没有办法整理动态绑定。在 dynamic 下,我的意思是根据列动态解析属性名称。
转换? N
?想法?
答案 0 :(得分:0)
会像
public String Name
{
get { return name; }
set { name = value; OnPropertyChanged("name"); }
}
和
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}
有可能吗?这样您至少可以生成字符串并将其作为参数添加到OnPropertyChanged。