【问题标题】:Binding in ListView in XAML Xamarin在 XAML Xamarin 中的 ListView 中绑定
【发布时间】:2019-02-25 16:41:47
【问题描述】:

有人可以回答我关于列表视图的问题吗? 我有变量 MyDatas ,它是 listview 的集合(并且有效):

<ListView 
            x:Name="lstView"
            HasUnevenRows="True"
            ItemsSource="{Binding MyDatas}"> ...

接下来我有(我的部分代码,但足以解释问题):

<Label Grid.Row="0"
       Grid.Column="1" 
       Text="{Binding E1}" 
       FontSize="{Binding FProp.Size1}" 
       FontAttributes="{Binding FProp.Atrib1}"/>

E1 是 MyDatas 的一个字段,此绑定工作正常。我在另一个变量 FProp(FProp.Size1 和 FProp.Atrib1)中有字体属性,这是问题!如何在此列表视图中使用另一个变量? 如果 FProp 在 listview 之外使用,一切正常,如果我在 listview 中使用它,它就不起作用。

感谢您的帮助

【问题讨论】:

  • 根据 API 文档,FontSize 不是可绑定属性
  • 不是吗?有一个可绑定属性标记为 fontsize docs.microsoft.com/en-us/dotnet/api/… 的后备存储属性
  • 文档可能有误。通常可绑定的在属性列表中会说“这是一个可绑定的属性”
  • 感谢您的回答。例如,我将在 listview 之外的标签中尝试它。
  • 我签入了我的应用程序。确实,我们不能绑定属性 FontSize 和 FontAttributes。没有可绑定的属性。

标签: xaml listview xamarin android-listview


【解决方案1】:

我相信您没有正确绑定字体大小。 您在对象 FProp 内引用了一个名为 Size1 的属性,该对象不在您当前的绑定上下文中。主要问题是每个对象只能有一个绑定上下文。因此,您应该在您的MyDatas 对象中包含Size1Atrib1,以使其可用于标签。另一种选择是将列表视图的绑定上下文更改为指向FProp,然后您可以访问标签上的值,但您将无法访问E1 值。因此,您需要根据提供的选项选择如何解决此问题。

【讨论】:

  • 谢谢。不幸的是,我很害怕:-(我认为我不能在一个列表视图中同时使用两个不同的变量。因此我问了这个问题。你确定是这样吗?如果是,我必须找到另一种方法来解决这个问题. 然后我会将 FProp 的属性 Size1 包含到我在 listview 中观察到的变量 MyDatas 中。
【解决方案2】:

您可以在您的 ListView 中添加一个 x:Name,比如 listView1 并使用类似这样的内容

{Binding Path=BindingContext.FProp.Size1, Source={x:Reference listView1}}

【讨论】:

  • 谢谢 :-) 我马上试试。
  • 但是如果 FontSize 和 FontAttributes 不是可绑定的属性,它会起作用吗?
  • 我查过了。您的想法非常适合在我们的列表视图中使用另一个变量的属性。真的是 FProp.Size1 在列表视图中可见。但它不是可绑定的属性,也没有设置 FontSize。 FontSize 设置为默认值。
  • 嗯源代码似乎将标签显示为可绑定github.com/xamarin/Xamarin.Forms/blob/master/Xamarin.Forms.Core/…(我会在我回到办公桌前进行测试)...无论如何您都可以使用行为附加属性来制作自己的可绑定属性
  • :-) 我会检查一下...谢谢。请告诉我你的测试结果是什么
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-07
  • 2014-12-08
  • 1970-01-01
  • 2017-02-09
  • 1970-01-01
  • 2017-12-15
  • 1970-01-01
相关资源
最近更新 更多