Xamarin.Forms EntryCell失去第一次单元失去焦点的价值

时间:2016-06-21 04:59:37

标签: listview xamarin xamarin.forms uwp

我有一个listview,其中包含一个字符串列表的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>

在viewmodel中,构造函数中有以下代码,用于添加初始元素:

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

我还在viewmodel中为玩家定义了属性

    public List<string> Players { get; }

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

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

我是如何将第一个值保留在列表视图中的?

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

1 个答案:

答案 0 :(得分:0)

好吧,我还没有弄清楚字符串的问题,但我确实解决了这个问题。我的下一步是将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的一个特征,对我来说似乎并不明显。说实话,闻起来像个臭虫。