ListView双向编译绑定(x:Bind)

Gaa*_*aaH 5 c# xaml binding listview windows-10

我想显示几个名字,我希望它们可以编辑.所以我使用了一个ObservableColection,并使用新的x:Bind功能将它绑定到ListView.

这是我的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>
Run Code Online (Sandbox Code Playgroud)

我的代码背后:

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

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

问题是TwoWay绑定无法编译,我得到错误CS1061'WeakReference'不包含'LostFocus'的定义,并且没有扩展方法'LostFocus'接受类型'WeakReference'的第一个参数可以找到(你是否遗漏了) using指令或程序集引用?)

我该如何解决?

Mik*_*nen 0

这似乎是 Windows 10 SDK 预览版中的一个问题。给出以下代码:

主页.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>
Run Code Online (Sandbox Code Playgroud)

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;
    }
Run Code Online (Sandbox Code Playgroud)

玩家.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));
    }
}
Run Code Online (Sandbox Code Playgroud)

编译和应用程序工作并提供预期的行为:

工作应用程序