【问题标题】:bind value from another object in ListView绑定 ListView 中另一个对象的值
【发布时间】:2016-05-02 13:55:53
【问题描述】:

在 ListView 中,我想 x:Bind 来自另一个对象的值,而不是 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>

我该如何存档?

【问题讨论】:

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


    【解决方案1】:

    我相信这可以通过相对源绑定来实现,虽然我想不通。

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

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

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

    我已经使用了这个概念。如果您愿意,我可以为此共享伪代码。编码愉快。

    【讨论】:

    • 我猜 x:Bind 不需要 ElementName
    • 是的,正确。相同的规则适用于元素名称,它将无法在编译时评估类型。
    • 是的,请分享你所做的一些@Kiran Paul
    • 这里是我提到的概念的一个示例解决方案。 github.com/ksp90/UsingDataTemplate 在这个解决方案中,我使用了一个模型、一个视图模型和一个带有翻转视图和数据模板的视图。在 Flipview 模板中,我想显示文本索引 # of # 信息。最后一个数字是集合中数据的最大索引。因此,我在 viewmodel 中创建了一个属性。但由于我无法从数据模板访问该属性,我需要其他折叠控件的帮助,如文本框 (TotalData)。请仔细阅读代码,希望它能给你一些澄清。
    【解决方案2】:

    请创建一个视图模型来封装这两个列表。

    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>
    

    【讨论】:

      【解决方案3】:

      您必须在 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-09-26
        • 1970-01-01
        • 2011-01-06
        • 1970-01-01
        • 1970-01-01
        • 2020-06-22
        • 1970-01-01
        相关资源
        最近更新 更多