C# 动态绑定-基于列解析属性名称
我有C# 动态绑定-基于列解析属性名称,c#,wpf,mvvm,data-binding,C#,Wpf,Mvvm,Data Binding,我有ListView,在同一列中有不同的单元格(通过使用DataTemplateSelector实现)。下面是一个非常简单的示例: <ListView ItemsSource="{Binding Items}"> <ListView.Resources> <l:ResultsSelector x:Key="result1"> <l:ResultsSelector.TemplateResult>
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;}
...
}
private observedcollection\u项目;
公共可观测收集项目
{
获取{return\u items;}
设置
{
_项目=价值;
OnPropertyChanged();
}
}
公共类项:NotifyPropertyChangedBase
{
公共字符串Result1{get;set;}
公共字符串Result2{get;set;}
公共字符串Result3{get;set;}
...
}
问题:ResultSelector
对于所有结果列都是相同的(还有其他列),唯一的区别是绑定属性的名称:对于列“Result1”,它是Result1
,IsResult1
,等等;对于“Result2”-Result2
,等等
Aim:我只想定义一次选择器(正如我前面所说的,这是一个非常简化的版本,所以复制/粘贴“result1”选择器定义N
次是一个非常糟糕的选择,尤其是当我以后必须更改某些内容时),并以某种方式将其用于所有列
问题:是否有组织动态绑定的方法。在“动态”下,我指的是根据列动态解析的属性名
转换器<代码>用户控制?想法?你想要什么
public String Name
{
get { return name; }
set { name = value; OnPropertyChanged("name"); }
}
及
有可能吗?这样,您至少可以生成字符串并将其作为参数添加到OnPropertyChanged中。我想您误解了我的问题。查看选择器模板之一中的
TextBlock
。它绑定到Result1
,这没有问题,它显示了正确的值。问题是要避免创建另一个选择器(在xaml中定义它),其中相同的TextBlock
将绑定到例如Result2
。啊,好吧,所以这和我发布的相反。您需要一个通用XAML{Binding Result}而不是通用代码?是的,其中Result
值取自Result2
属性,当它显示在“Result2”列中时。
public event System.ComponentModel.PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new System.ComponentModel.PropertyChangedEventArgs(propertyName));
}
}