2015-06-04 18 views
5

Tôi muốn hiển thị một số tên và tôi muốn chúng có thể chỉnh sửa được. Vì vậy, tôi đã sử dụng ObservableColection và liên kết nó với một ListView với tính năng x: Bind mới.ListView hai cách biên soạn ràng buộc (x: Bind)

Dưới đây là XAML của tôi:

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

Và mã của tôi đằng sau:

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

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

Vấn đề là TwoWay ràng buộc thất bại trong việc biên dịch, tôi nhận được 'WeakReference' lỗi CS1061 không chứa định nghĩa cho 'LostFocus' và không có phương pháp mở rộng 'LostFocus' chấp nhận đối số đầu tiên của loại 'WeakReference' có thể được tìm thấy (bạn đang thiếu một chỉ thị sử dụng hoặc tham chiếu assembly?)

Làm cách nào để khắc phục sự cố?

+0

Bạn có thể hiển thị toàn bộ XAML. Bạn đang làm x: Liên kết với sự kiện LostFocus? –

+0

[Mã XAML đầy đủ] (http://pastebin.com/GL4vZn38) Như bạn thấy, tôi muốn chỉnh sửa các phần tử trong ListView. Nó hoạt động đúng với ràng buộc cổ điển, nhưng không phải với x: Bind – GaaH

+0

Nếu bạn thay đổi liên kết TwoWay thành OneWay, bạn có gặp vấn đề không? –

Trả lời

0

Điều này có vẻ như là sự cố trong phiên bản xem trước của Windows 10 SDK. Căn cứ vào đoạn mã sau:

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

Việc lập và các công trình ứng dụng và cung cấp các hành vi mong đợi:

Working app

Các vấn đề liên quan