0

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);
    }
}

私は次のようChessPiecesChessBoard(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バインディングで私が間違っていることを知っている人はいますか?

4

2 に答える 2