2016-06-21 130 views
0

我有一个列表视图与一个ItemsSource的字符串列表,并且DataTemplate是一个条目单元格文本绑定到字符串。如果我单击输入单元格并开始输入,我可以看到在输入时进行的更改,但只要单击ListView外部的输入元素,我的更改就会丢失。Xamarin.Forms EntryCell第一次丢失值第一次单元失去焦点

<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"); 

我还定义在视图模型

public List<string> Players { get; } 

唯一用于运动员属性发生的时间是我第一次点击播放器标签旁边的输入框。如果我点击空白空间,我可以看到所选列表视图项目的蓝色边框消失,但值仍然是我将其更改为的值,但只要单击该条目,列表视图中条目单元格的值就会恢复为他们的原始价值。

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

任何想法如何保持输入到列表视图中的第一个值?

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

+0

你试过双向绑定了吗? –

+0

是的,它没有工作。 –

回答

0

嗯,我还没有弄清楚字符串的问题,但我确实解决了这个问题。我的下一步是将玩家封装为一个对象而不是一个字符串,所以我向前迈进了一步,并且注意到绑定在没有重置的情况下按照应有的方式工作。

我加Player类,对于现在的球员只有一个名字:

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

一切都改变了有关的看法是,我现在引用播放器对象的名称属性而不是一个字符串字符串列表:

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

谁能告诉我,为什么字符串列表是演技搞笑?如果它是Xamarin.Forms的一个特性,它对我来说似乎并不明显。说实话,闻起来就像一个错误。

+0

您是否尝试使用ObservableCollection 并实现INotifyPropertyChanged接口?在双向绑定模式下,一切都应按照您期望的那样工作。 –

+0

是的,起初我试着用ObservableCollection ,它仍然给我我看到的问题,但使用ObservableCollection 似乎工作正常。 –