2016-11-23 59 views
-3

我想在列表视图中显示一个属性。我的问题是,我想要显示的数据比我的ItemSource更深,它应该只显示具有特定值的属性。wpf数据绑定的条件很深的财产

这里有一个例子:

public class Item 
{ 
    private string id; 
    private List<Tags> tags; 

    public string Id 
    { 
     get 
     { 
      return id; 
     } 

     set 
     { 
      id = value; 
     } 
    } 

    public List<Tags> Tags 
    { 
     get 
     { 
      return tags; 
     } 

     set 
     { 
      tags = value; 
     } 
    } 
public class Tags 
{ 
    private string id; 
    private Data d; 

    public string Id 
    { 
     get 
     { 
      return id; 
     } 

     set 
     { 
      id = value; 
     } 
    } 

    public Data D 
    { 
     get 
     { 
      return d; 
     } 

     set 
     { 
      d = value; 
     } 
    } 
} 

public class Data(){public string Text{set;get;} 

,现在我想尝试做这样的事情

 <ListView x:Name="listView"ItemsSource="{Binding Items}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Tags.Data.Text}"/> 
      </GridView> 
     </ListView.View> 
    </ListView> 

但现在我想它只显示一个特定的编号,而不是标签所有标签。 And Items是一个ObservableCollection。

回答

0

我正在为您提出2个解决方案。

1)看看,如果这个工程:

<ListView x:Name="listView"ItemsSource="{Binding Items}"> 
     <ListView.View> 
      <GridView> 
       <GridViewColumn DisplayMemberBinding="{Binding Path=Tags.Data.Text}"/> 
      </GridView> 
     </ListView.View> 
</ListView> 

如果这不起作用,让我们来重构你的代码,并利用WPF能力......

2)另一种解决方案

坐落在您的视图模型的属性,如:

public Tag SelectedTag 
{ 
    get {...}; 
    set 
    { 
     _selectedTag = value ; 
     SelectedData = value!=null?_selectedTag.Data:null; 
     //call notifypropertychanged here...  
    } 
}; 

public Data SelectedData {get {...}; set {....}}; 

所以在你的ListView,做一个绑定像这样:

<ListView x:Name="listView" 
     ItemsSource="{Binding Items}" 
     SelectedItem={Binding SelectedTag, Mode=TwoWay, UpdateSourceTrigger="ProperyChanged"> 
    <ListView.View> 
     <GridView> 
      <GridViewColumn DisplayMemberBinding="{Binding Path=DataContext.SelectedData.Text,ElementName="YourWindowName"}"/> 
     </GridView> 
    </ListView.View> 
</ListView> 
+0

非常感谢您的快速回答。我不认为第一个会帮助^^,但第二个解决方案看起来像一个可行的方法。我会在放学后试一试。 – Kleisophabo