2015-06-04 8 views
5

Ich möchte mehrere Namen anzeigen, und ich möchte, dass sie bearbeitet werden können. Also habe ich eine ObservableColection verwendet und sie mit der neuen x: Bind-Funktion an ein ListView gebunden.ListView zwei Wege kompilierte Bindung (x: Bind)

Hier ist meine XAML:

<ListView> 
     <ListView ItemsSource="{x:Bind ViewModel.Players}"> 
       <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      </Style> 
     </ListView.ItemContainerStyle> 

     <ListView.ItemTemplate> 
      <DataTemplate xmlns:model="using:Flechette.Model" x:DataType="model:Player"> 
       <TextBox Text="{x:Bind Name, Mode=TwoWay}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

Und mein Code hinter:

public sealed partial class GameSettingsPage : Page 
{ 
    ViewModel.GameSettingsViewModel ViewModel { get; set; } 

    public GameSettingsPage() 
    { 
     InitializeComponent(); 
     DataContextChanged += (s, e) => ViewModel = DataContext as ViewModel.GameSettingsViewModel; 
    } 
} 

Das Problem ist, dass TwoWay zu kompilieren fehlgeschlagen Bindung, erhalte ich die Fehler CS1061 'WeakReference' enthält keine Definition für 'LostFocus' und keine Erweiterungsmethode 'LostFocus', die ein erstes Argument vom Typ 'WeakReference' akzeptiert, konnten gefunden werden (fehlt eine using-Direktive oder eine Assemblyreferenz?)

Wie kann ich es beheben?

+0

Können Sie die volle XAML zeigen. Machst du x: Bind auf dem LostFocus-Event? –

+0

[Der vollständige XAML-Code] (http://pastebin.com/GL4vZn38) Wie Sie sehen können, möchte ich die Elemente in der ListView bearbeiten. Es funktioniert ordnungsgemäß mit klassischen Bindung, aber nicht mit x: Bind – GaaH

+0

Wenn Sie die TwoWay Bindung an OneWay ändern, erhalten Sie das Problem? –

Antwort

0

Dies scheint ein Problem in der Vorschauversion von Windows 10 SDK. Angesichts der folgenden Code:

MainPage.xaml:

 <ListView x:Name="Players"> 
     <ListView.ItemContainerStyle> 
      <Style TargetType="ListViewItem"> 
       <Setter Property="HorizontalContentAlignment" Value="Stretch" /> 
      </Style> 
     </ListView.ItemContainerStyle> 

     <ListView.ItemTemplate> 
      <DataTemplate x:DataType="local:Player"> 
       <TextBox Text="{x:Bind Name, Mode=TwoWay}" /> 
      </DataTemplate> 
     </ListView.ItemTemplate> 
    </ListView> 

MainPage.xaml.cs:

private ObservableCollection<Player> players = new ObservableCollection<Player>(); 
    public MainPage() 
    { 
     this.InitializeComponent(); 
    } 

    protected override void OnNavigatedTo(NavigationEventArgs e) 
    { 
     this.players.Add(new Player()); 
     this.players.Add(new Player()); 
     this.players.Add(new Player()); 
     this.players.Add(new Player()); 
     this.players.Add(new Player()); 

     this.Players.ItemsSource = players; 
    } 

Player.cs:

public class Player : INotifyPropertyChanged 
{ 
    private string name; 

    public string Name 
    { 
     get { return name; } 
     set 
     { 
      if (value == name) return; 
      name = value; 
      OnPropertyChanged(); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null) 
    { 
     PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); 
    } 
} 

Die Zusammenstellung und App funktioniert und liefert das erwartete Verhalten:

Working app

Verwandte Themen