2016-06-21 10 views
0

私はリストリストのItemsSourceでリストビューを持ち、DataTemplateはエントリセルのテキストです。入力セルをクリックして入力を開始すると、入力時に変更が加えられているのがわかりますが、ListView外の入力要素をクリックすると、変更が失われます。私ものviewmodelXamarin.Forms EntryCellは、最初にセルがフォーカスを失うと値を失います。

public List<string> Players { get; } 

だけでプレーヤーのためのプロパティを定義

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

:私は最初の要素を追加し、コンストラクタに次のコードを持っているのviewmodelで

<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> 

それが起こる時間は、プレイヤーの数の横にある入力ボックスをクリックするのが初めてです。空のスペースをクリックすると、選択したリストビュー項目の青い枠線が消えるのがわかりますが、値は変更されたままですが、項目をクリックするとリストビューのエントリセルの値はその元の値。

WPFで似たようなことが起こったようですが、これは私のバインディングにUpdateSourceTrigger = PropertyChangedを追加するだけで対応しました。限り、私が知っている限り、Xamarin.Formsのものではありません(少なくともまだ)。

リストビューに最初に入力した値をどのように保つことができますか?

私が作業しているファイルは、Xamarin.Forms Portableクラスライブラリにあり、Universal Windows(UWP)ビルドを使用してテストしています。

+0

双方向バインディングを試しましたか? –

+0

はい、動作しませんでした。 –

答えて

0

文字列の問題はまだわかりませんが、問題を回避しました。私の次のステップは、文字列ではなくオブジェクトとしてPlayerをカプセル化することだったので、私はこれを前に進めて、バインドをリセットせずに済ませるべきだと考えました。

今プレイヤーは名前だけを持っているため、私は、プレイヤーのクラスを追加しました:

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

ビューについての変更そのすべてが、私は今、かなりの文字列よりも、プレーヤーオブジェクトのNameプロパティを参照するということでした文字列のリスト:

<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を使用すると、は正常に動作しているようです。 –

関連する問題