【问题标题】:Xamarin.Forms EntryCell loses value first time cell loses focusXamarin.Forms EntryCell 在单元格第一次失去焦点时失去价值
【发布时间】:2016-10-22 11:58:33
【问题描述】:

我有一个列表视图,其中包含一个字符串列表的 ItemsSource,而 DataTemplate 是一个条目单元格文本,它绑定到该字符串。如果我单击输入单元格并开始输入,我可以看到我在输入时所做的更改,但是一旦我单击 ListView 之外的输入元素,我的更改就会丢失。

<StackLayout Orientation="Horizontal">
      <Label>Number of Players</Label>
      <Entry Text="3" />
    </StackLayout>
    <ListView Header="Players" ItemsSource="{Binding Players}">
      <ListView.ItemTemplate>
        <DataTemplate>
          <EntryCell Text="{Binding .}"/>
        </DataTemplate>
      </ListView.ItemTemplate>
    </ListView>
  </StackLayout>

在视图模型中,我在构造函数中有以下代码,它添加了初始元素:

    Players = new List<string>();
    Players.Add("test1");
    Players.Add("test2");

我还在视图模型中定义了 Players 的属性

    public List<string> Players { get; }

唯一一次是我第一次点击玩家数量标签旁边的输入框。如果我单击空白区域,我可以看到所选列表视图项的蓝色边框消失,但该值仍然是我将其更改为的值,但只要我单击条目,列表视图中条目单元格的值就会恢复为它们的原始值。

我觉得我在 WPF 中遇到过类似的事情,我只是通过将 UpdateSourceTrigger=PropertyChanged 添加到我的绑定来响应。据我所知,这不是 Xamarin.Forms 中的事情(至少现在还没有)。

有什么想法可以保留输入到列表视图中的第一个值吗?

我正在处理的文件位于 Xamarin.Forms 可移植类库中,我正在使用通用 Windows (UWP) 构建对其进行测试。

【问题讨论】:

  • 你试过双向绑定吗?
  • 是的,没用。

标签: listview xamarin xamarin.forms uwp


【解决方案1】:

好吧,我还没有弄清楚字符串的问题,但我确实解决了这个问题。我的下一步是将 Player 封装为一个对象而不是字符串,因此我继续进行此操作,并且发现绑定在没有重置的情况下按照应有的方式工作。

我添加了 Player 类,现在玩家只有一个名字:

public class Player
{
    public string Name { get; set; }
}

View 的所有变化在于我现在引用了 Player 对象的 Name 属性,而不是字符串列表中的字符串:

<ListView Header="Players" ItemsSource="{Binding Players}">
  <ListView.ItemTemplate>
    <DataTemplate>
      <EntryCell Text="{Binding Name}"/>
    </DataTemplate>
  </ListView.ItemTemplate>
</ListView>

谁能告诉我为什么字符串列表表现得很有趣?如果它是 Xamarin.Forms 的一个功能,对我来说似乎并不明显。老实说,闻起来像虫子。

【讨论】:

  • 您是否尝试使用 ObservableCollection 并实现 INotifyPropertyChanged 接口?在双向绑定模式下,一切都应该按照您的预期工作。
  • 是的,起初我尝试使用 ObservableCollection 仍然给我看到的问题,但使用 ObservableCollection 似乎工作正常。
猜你喜欢
  • 1970-01-01
  • 2014-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-23
  • 1970-01-01
  • 2012-03-31
  • 1970-01-01
相关资源
最近更新 更多