我的ViewModel中有一个Xamarin.Forms.Color对象的二维数组。我想将这个数组绑定到我的View中的一堆BoxView对象,并根据数组的内容设置它们的颜色。我知道如何绑定到ViewModel上的字符串,int或bool等属性,但是如果我要绑定的特定值是像Color这样的系统提供的对象,我不知道。
代码段:
ViewModel具有我想绑定的属性:
public GameGrid<Color> Board;
视图未在XAML中声明,而是通过C#代码声明。我想要绑定的属性是BoxView的ColorProperty,如下所示:
boxView.BindingContext = _viewModel.Board[row, col];
boxView.SetBinding(BoxView.ColorProperty, ".", BindingMode.Default);
鉴于_viewModel.Board属性是二维数组或Color类型的单元格,如何绑定它? “。”是一个占位符 - 我不知道我应该把它放在那里。
GameGrid类包装了一个二维数组,因为我想我需要实现INotifyPropertyChanged,以便稍后我可以对此数组中的各个元素更改做出反应,以便为游戏移动设置动画。为完整起见,其代码如下:
public class GameGrid<T> : INotifyPropertyChanged
{
private T[,] _array;
public GameGrid(int rows, int columns)
{
_array = new T[rows, columns];
}
public T this[int a, int b]
{
get
{
return _array[a, b];
}
set
{
_array[a, b] = value;
RaisePropertyChanged(nameof(GameGrid<T>));
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(
this, new PropertyChangedEventArgs(propertyName));
}
}
如果我将我的二维数组更改为一个简单的对象,例如;
public class Wrapper
{
public Color BindThis { get; set; }
}
public GameGrid<Wrapper> Board;
像这样绑定到该属性是非常简单的:
boxView.SetBinding(BoxView.ColorProperty, "BindThis", BindingMode.Default);
但这似乎不必要地复杂化了。
答案 0 :(得分:1)
看起来你正走在正确的轨道上。单个点(.
)是绑定到BindingContext
本身的语法;不是BindingContext
上的属性,而是当前BindingContext
的对象。
您是否尝试使用.
作为Binding
表达式运行代码?
BoxView.Color
的类型为Xamarin.Forms.Color
,因此您应该能够直接绑定到它。