2017-08-30 13 views
0

現在、WPFでUniformGridにデータを設定しようとしています。実行時にUniformGridの子アイテムを変更します。

いくつかのコンテキスト:私は2D Sidescrollerを構築しようとしています(WPFはこれに最適なソリューションではありません。Unityなどを使用する必要があります)。さて、マップについては、UniformGridを使用し、マップのタイルとして子を使用することを考えていました。

これまでのところ、私は、コードのこの部分を使用してUniformGridに空の子を追加しています:

MapGridは私UniformGridある
private void CreateMapTiles() { 
    for (int i = 0; i < 30; i++) { 
     for (int j = 0; j < 45; j++) { 
      this.MapGrid.Children.Add(new Image()); 
     } 
    } 
} 

だから、結局は30x45人の子供が欲しいです。 これで、CodeBehindでそれらの子を動的に編集する、つまりそれらの子をイメージにしたいと思います。別の言い方をすれば、インデックス5の子どもが自分のリソースから別のイメージを表示するように更新したいと思います。

私はこのような何か使用して考えていた:

this.MapGrid.Children[1] = new Image() { Source = ReturnSomeSource() }; 

をしかし明白な理由のために、これは動作しません。

実行時に子に値を割り当てる方法はありますか? 私もthis.MapGrid.Children[1].SetCurrentValue()で遊んだことがありますが、どちらも私がやっていたことを本当に理解していませんでした。

実行時にUniformGridの子を変更する可能性はありますか? 通常のグリッドはより良い仕事をしますか? UniformGridの子供たちは、それ以上の努力なしに必要な方法で自動的に配置され、サイズ調整されるので、私はそれを避けたかったのです。

+0

これは、データバインディングを使用するMVVMパターンの方がはるかに簡単です。コンテナとして 'UniformGrid'を持つ' ObservableCollection'にバインドされた 'ItemsControl'を使用してください。コレクションのアイテムを追加/編集/削除するだけで、UIが自動的に調整されます。 –

+0

私は本当にMVVMのパターンについて何も知らないことを恐れていますが、これを処理するうまい方法のように思えるので、私はそれに読みを付けるべきだと思います。ヒントありがとう! – rqnn

答えて

0

Imageを新しいImageに置き換えるのではなく、既存のイメージのソースを変更します。

var tileImage = this.MapGrid.Children[1] as Image; 
tileImage.Source = ReturnSomeSource(); 
+0

ありがとう、これは魅力のように動作します。 – rqnn

関連する問題