2015-06-04 11 views
5

Chcę wyświetlić kilka nazw i chcę, aby były edytowalne. Więc użyłem ObservableColection i związałem go z ListView z nową funkcją x: Bind.ListView Dwukierunkowe kompilowane powiązanie (x: Bind)

Oto mój 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> 

A mój kod za:

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

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

Problemem jest to, że TwoWay wiązanie udało się skompilować, otrzymuję 'WeakReference' Błąd CS1061 nie zawiera można znaleźć definicję "LostFocus" i brak metody rozszerzającej "LostFocus", przyjmując pierwszy argument typu "WeakReference" (czy brakuje instrukcji użycia lub odniesienia do zespołu?)

Jak mogę to naprawić?

+0

można wyświetlić pełną XAML. Robisz x: Bind na imprezie LostFocus? –

+0

[Pełny kod XAML] (http://pastebin.com/GL4vZn38) Jak widać, chcę edytować elementy w ListView. Działa poprawnie z klasycznym wiązaniem, ale nie z x: Bind – GaaH

+0

Jeśli zmienisz powiązanie TwoWay z OneWay, czy masz problem? –

Odpowiedz

0

To wydaje się być problemem w wersji zapoznawczej pakietu Windows 10 SDK. Biorąc pod uwagę następujący kod:

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

Kompilacja i prace aplikacji i zapewnia oczekiwane zachowanie:

Working app

Powiązane problemy