Joa*_*nge 6 .net c# data-binding wpf xaml
我有2个集合,我想绑定到一个单独GridViewColumn的ListView:
public class EffectView : INotifyPropertyChanged
{
ObservableCollection<Effect> effects;
public ObservableCollection<Effect> Effects
{
get { return this.effects; }
set
{
this.effects = value;
this.RaisePropertyChanged ( "Effects" );
}
}
ObservableCollection<EffectDescription> descriptions;
public ObservableCollection<EffectDescription> Descriptions
{
get { return this.descriptions; }
set
{
this.descriptions = value;
this.RaisePropertyChanged ( "Descriptions" );
}
}
}
Run Code Online (Sandbox Code Playgroud)
我可以做这个:
<ListView ItemsSource="{Binding EffectView.Effects}">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Name}"
Header="Name" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Opacity}"
Header="Opacity" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding ?}"
Header="Description" />
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
但后来所有内容都限定了EffectView.Effects,但我希望默认范围是EffectView这样的,我可以很容易地分配多个集合ListView.
就像是:
<ListView ItemsSource="{Binding EffectView}">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Effects Path=Name}"
Header="Name" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Effects Path=Opacity}"
Header="Opacity" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Descriptions Path=Usage}"
Header="Description" />
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)
有没有办法实现这个目标?
在ItemsSource一个ListView的是收集他们的项目将出现在列表中.那么想一想你要求ListView做什么:
注意第二点:每行必须显示Events集合中的一些项目和Descriptions集合中的一些项目.
从每个项目中选择哪个项目?这两个系列中的项目之间有什么关系?
这似乎是你真正需要的是对象的集合,其中包含两个事件和说明.然后,您可以绑定到该集合以显示两个实体的元素.粗略地,这样的事情:
public class EffectView : INotifyPropertyChanged
{
ObservableCollection<EffectsAndDescriptions> effects;
public ObservableCollection<EffectAndDescriptions> Effects
{
get { return this.effects; }
set
{
this.effects = value;
this.RaisePropertyChanged ( "EffectsAndDescriptions" );
}
}
}
internal class EffectsAndDescriptions
{
public Effect Effect { get; set; }
public Description Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在您可以绑定到EffectsAndDescriptions集合(请注意,这假定ListView的父级的DataContext 是EffectView)
<ListView ItemsSource="{Binding EffectsAndDescriptions}">
<ListView.View>
<GridView>
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Effect.Name}"
Header="Name" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Effect.Opacity}"
Header="Opacity" />
<GridViewColumn Width="Auto"
DisplayMemberBinding="{Binding Description.Usage}"
Header="Description" />
</GridView>
</ListView.View>
</ListView>
Run Code Online (Sandbox Code Playgroud)