109 строки
3.0 KiB
C#
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; }
|
|
}
|
|
}
|
|
} |