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指令或程序集引用?)
我该如何解决?
这似乎是 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)
编译和应用程序工作并提供预期的行为:
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |