iv'eは、ボードゲームを表す3つのクラスからなるDLLを得た:WPF:のItemsControlにコレクションを結合
Board , Pipe , Checker
ボードはパイプのコレクションであり、パイプがチェッカーのコレクションである
相手の動きは、あるパイプからチェッカーを取り出して別のパイプに配置することで構成されます。
私のボードは23項目、コントロールとグリッドパネルで表され、 Iは、プレイヤの動きをすることによって行われることになるUI
上の動きを表示するようにパイプに各項目制御をバインドする必要がありますitemcontrols 間ドロップドラッグ(まだその部分に周りにもらっていない)
チェッカークラス:
public Checker
{
public bool IsMine{get; set;}
}
IsMineプロパティはチェッカーコルを決定するために使用される必要がありますまたは。
パイプクラス:それは追加のパイプ項目を対応するコレクションが
を変更したときの項目を削除しているもの、私はそれぞれのItemsControlの間の結合を2ウェイを作成されて行う必要があるとチェッカーpublic class Pipe : INotifyPropertyChanged
{
public Pipe()
{
checkers = new ObservableCollection<Checker>();
}
private ObservableCollection<Checker> checkers {get;set;}
public ObservableCollection<Checker> Checkers
{
get { return checkers; }
set
{
checkers = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Checkers"));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
ののObservableCollectionを保持しています
また、IsMineプロパティをチェックし、それに応じてオブジェクトを 色に設定するカスタムコンバータが必要です(itemsControl DataItemTemplateは、各チェッカーを とするEllipseで構成されています)。今まで
はiv'eだけのコレクションを移入し、各項目は、制御のための項目ソースとしてそれらを設定
例えば:
Pipe23.ItemsSource = board.Pipes[23].Checkers;
私は2つの課題に直面しています: (1) エーテルは、 のコードのOwnerToColorコンバーターとの双方向バインディングを作成します。これは、これがどのように行われたかの例を見つけることができませんでした。
(2)マークアップでこの結合を作るが、その後どのようにして、例えば、適切なパイプ
で開始アイテム 初期化することができ:
pipe23 starts with 2 checkers
board.Pipes[23].Checkers.Add(new Checker(true));
board.Pipes[23].Checkers.Add(new Checker(true));
コレクション間の結合2ウェイのための任意の良い例itemsControlが最も高く評価されます。
のItemsControl:
<ItemsControl Grid.Row="0" Grid.Column="0" Name="Pipe23" ItemTemplate="{StaticResource PipeDataItem}"/>
のDataTemplate:
<DataTemplate x:Key="PipeDataItem" >
<Ellipse Width="45" Height="45" Fill="{Binding IsMine,Converter={StaticResource MyOwnerToColorConverter}}"></Ellipse>
</DataTemplate>
私は多分私が何の項目を記載していない例外をスローした項目コントロールに楕円を追加しようとしたのItemsControlとコレクション 間の牽引方法バインド を行うことは不可能だと思うし始めていますitemscontrolが使用されている間に追加することができます。 –