我有一个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)构建对其进行测试。
答案 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的一个特征,对我来说似乎并不明显。说实话,闻起来像个臭虫。