绑定ListView中另一个对象的值

时间:2016-05-02 13:55:54

标签: c# xaml listview data-binding win-universal-app

在ListView中我想要x:绑定另一个对象而不是ListView ItemsSource的值。

var objectList1 = new List<Object1>();
var object2 = new Object2();

<ListView ItemsSource="{x:Bind objectList1}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding PropertyOfObject1}"/>
            <TextBlock Text="{x:Bind object2.PropertyOfObject2}"/>              
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

我怎么能达到这个目的?

3 个答案:

答案 0 :(得分:1)

我相信这可以通过相对源绑定来实现,尽管我无法弄清楚。

但我可以给你一个替代解决方案。

1)在XAML中使用隐藏元素并将其绑定到所需的视图模型属性。(这可能很容易实现,因为它在数据模板的外面)。

2)然后将(数据模板中的第二项)绑定到该隐藏元素作为元素绑定。

我已经使用过这个概念。如果你想我可以共享伪代码。快乐的编码。

答案 1 :(得分:0)

请创建一个viewmodel来封装两个列表。

public class viewmodel{
public List<Object1>{get;set;}
public List<Object1>{get;set;}

} 然后你可以像这样绑定

<ListView ItemsSource="{x:Bind viewmodel}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding PropertyOfObject1}"/>
            <TextBlock Text="{x:Bind object2.PropertyOfObject2}"/>              
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

答案 2 :(得分:0)

您必须在Object1中引用Object2。例如:

public class Object1
{
    public Object1(Object2 object2)
    {
        this.object2=object2;
    }

    public Object2 object2 {get;set;}

    public string PropertyOfObject1 {get;set;}
}


public class Object2
{
    public string PropertyOfObject2 {get;set;}
}


List<Object1> objectList1 = new List<Object1>();

Object2 o2 = new Object2();
Object1 item1 = new Object1(o2);
objectList1.Add(item1);