我正在 WPF 中编写国际象棋 UI。
我在 XAML 中设置了窗口数据上下文:
<Window.DataContext>
<local:MainViewModel />
</Window.DataContext>
我已将“本地”命名空间定义为包含视图模型的命名空间。
xmlns:local="clr-namespace:ChessUI"
视图模型有 1 个属性,一组棋子:
public class MainViewModel
{
public ObservableCollection<ChessPiece> ChessPieces { get; set; }
public MainViewModel()
:this(new ObservableCollection<ChessPiece>())
{
}
public MainViewModel(IEnumerable<ChessPiece> chessPieces)
{
this.ChessPieces = new ObservableCollection<ChessPiece>(chessPieces);
}
}
我试图像这样绑定ChessPieces
到我的ChessBoard
(一个ItemsControl):
<Viewbox RenderOptions.BitmapScalingMode="HighQuality">
<ItemsControl Name="ChessBoard" ItemsSource="{Binding ChessPieces}">
[...]
</ItemsControl>
</Viewbox>
但它不会在运行时显示这些片段。但是,如果我取消注释下面的行,它会起作用,我会看到板上的所有部分。
public MainWindow()
{
InitializeComponent();
var viewModel = new MainViewModel(this.GetStartingPositionChessPieces());
//this.ChessBoard.ItemsSource = viewModel.ChessPieces;
}
只是要清楚:
在 XAML 中设置绑定:
在代码中设置绑定:
任何人都知道我在 XAML 绑定中做错了什么?