我有自定义页面和自定义控件。
var input = document.querySelector('input[name="username"]');
input.value= 'whatever;
所以我的页面有一个Tiles Collection,即Frames。 现在我想通过XAML填充Collection。
我的XAML Sytax是这样的:
public class TilesPage : ContentPage
{
public ObservableCollection<Tile> Tiles
{
get;
set;
}
}
public class Tile : Frame
{
public static readonly BindableProperty TitleProperty = BindableProperty.Create(nameof(Title), typeof(string), typeof(Tile), null);
public Tile()
{
HasShadow = false;
}
public string Title
{
get
{
return (string)GetValue(TitleProperty);
}
set
{
SetValue(TitleProperty, value);
}
}
}
但收藏品仍然是空的。 XAML不接触它。
那么我的语法有什么问题?
答案 0 :(得分:1)
我在代码中看到了两个问题:
我们需要一个调用InitializeComponent()
public TilesPage()
{
InitializeComponent();
}
XAML解析器此时需要一个非空集合 - 这样它就可以添加多个元素。否则它会抛出一个解析异常 类型不匹配或空值。要解决这个问题,我们需要确保有一个默认值可以使用。
public ObservableCollection<Tile> _tiles = new ObservableCollection<Tile>();
public ObservableCollection<Tile> Tiles {
get { return _tiles; }
set { _tiles = value; }
}
您现在应该可以看到更新的集合:
protected override void OnAppearing()
{
base.OnAppearing();
Debug.WriteLine(Tiles?.Count);
foreach (var tile in Tiles)
Debug.WriteLine(tile.Title);
}
此外,建议将此属性转换为可绑定 - 以便更轻松地与XAML框架集成(非强制性)。
public static readonly BindableProperty TilesProperty =
BindableProperty.Create(nameof(Tiles), typeof(IList<Tile>), typeof(TilesPage),
defaultValue: new ObservableCollection<Tile>());
public IList<Tile> Tiles
{
get
{
return (IList<Tile>)GetValue(TilesProperty);
}
set
{
SetValue(TilesProperty, value);
}
}