maui-linux/Xamarin.Forms.Controls.Issues/Xamarin.Forms.Controls.Issu.../Bugzilla47971.cs

109 строки
3.0 KiB
C#

using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using Xamarin.Forms.CustomAttributes;
using Xamarin.Forms.Internals;
namespace Xamarin.Forms.Controls.Issues
{
[Preserve(AllMembers = true)]
[Issue(IssueTracker.Bugzilla, 47971, "UWP doesn't display list items when binding a CommandParameter to BindingContext in a DataTemplate and including a CanExecute method", PlatformAffected.WinRT)]
public class Bugzilla47971 : TestContentPage
{
protected override void Init()
{
var viewModel = new _47971ViewModel();
var lv = new ListView { BindingContext = viewModel };
lv.SetBinding(ListView.ItemsSourceProperty, new Binding("Models"));
lv.SetBinding(ListView.SelectedItemProperty, new Binding("SelectedModel"));
lv.ItemTemplate = new DataTemplate(() =>
{
var tc = new TextCell();
tc.SetBinding(TextCell.TextProperty, new Binding("Name"));
tc.SetBinding(TextCell.CommandParameterProperty, new Binding("."));
tc.SetBinding(TextCell.CommandProperty, new Binding("BindingContext.ModelSelectedCommand", source: lv));
return tc;
});
var layout = new StackLayout { Spacing = 10 };
var instructions = new Label {Text = "The ListView below should display three items (Item1, Item2, and Item3). If it does not, this test has failed." };
layout.Children.Add(instructions);
layout.Children.Add(lv);
Content = layout;
}
[Preserve(AllMembers = true)]
internal class _47971ViewModel : INotifyPropertyChanged
{
_47971ItemModel _selectedModel;
Command<_47971ItemModel> _modelSelectedCommand;
ObservableCollection<_47971ItemModel> _models;
public ObservableCollection<_47971ItemModel> Models
{
get { return _models; }
set
{
_models = value;
OnPropertyChanged();
}
}
public _47971ItemModel SelectedModel
{
get { return _selectedModel; }
set
{
_selectedModel = value;
OnPropertyChanged();
}
}
public Command<_47971ItemModel> ModelSelectedCommand => _modelSelectedCommand ??
(_modelSelectedCommand = new Command<_47971ItemModel>(ModelSelectedCommandExecute, CanExecute));
bool CanExecute(_47971ItemModel itemModel)
{
return true;
}
void ModelSelectedCommandExecute(_47971ItemModel model)
{
System.Diagnostics.Debug.WriteLine(model.Name);
}
public _47971ViewModel()
{
_models = new ObservableCollection<_47971ItemModel>(
new List<_47971ItemModel>()
{
new _47971ItemModel() { Name = "Item 1"},
new _47971ItemModel() { Name = "Item 2"},
new _47971ItemModel() { Name = "Item 3"}
});
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
[Preserve(AllMembers = true)]
internal class _47971ItemModel
{
public string Name { get; set; }
}
}
}