2016-06-21 32 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 似乎工作正常。 –