2015-06-04 4 views
5

Я хочу отобразить несколько имен, и я хочу, чтобы они были доступны для редактирования. Итак, я использовал ObservableColection и привязал его к ListView с новой функцией x: Bind.ListView двухсторонняя скомпилированная привязка (x: привязка)

Вот мой 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> 

И мой код позади:

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

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

Проблема заключается в том, что TwoWay привязка не удалось собрать, я получаю 'WeakReference' ошибка CS1061 не содержит определение для «LostFocus» и никакого метода расширения «LostFocus», принимающего первый аргумент типа «WeakReference», можно найти (вам не хватает директивы использования или ссылки на сборку?)

Как это исправить?

+0

Можете ли вы показать полный XAML. Вы делаете x: привязываетесь к событию LostFocus? –

+0

[Полный код XAML] (http://pastebin.com/GL4vZn38) Как вы можете видеть, я хочу редактировать элементы в ListView. Он работает правильно с классическим связыванием, но не с x: Bind – GaaH

+0

Если вы измените привязку TwoWay к OneWay, вы получите эту проблему? –

ответ

0

Это похоже на проблему в предварительной версии Windows 10 SDK. Учитывая следующий код:

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

компиляция и приложение работает и обеспечивает ожидаемое поведение:

Working app

Смежные вопросы