iv'e получил dll, состоящий из 3 классов, представляющих настольную игру:
Board , Pipe , Checker
доска - это набор труб, а трубы - это набор шашек
Движение противника будет состоять из удаления шашки из одной трубы и помещения его в другую.
моя доска представлена сеткой с 23 элементами управления,
мне нужно привязать каждый элемент управления к трубе, чтобы отображать движения в пользовательском интерфейсе
движение игрока будет выполняться путем перетаскивания между элементами управления предметами
(еще не дошел до этой части)
Класс Шашки:
public Checker
{
public bool IsMine{get; set;}
}
свойство IsMine необходимо использовать для определения цвета шашек.
Класс трубы: содержит ObservableCollection контролеров
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;
}
что мне нужно сделать, это создать двухстороннюю привязку между каждым itemcontrol и соответствующим ему элементом Pipe для добавления и удаления элементов при изменении коллекции
мне также нужен специальный конвертер, который проверит свойство IsMine и установит объекты
цвет соответственно (itemsControl DataItemTemplate состоит из эллипса, который будет
представлять каждый контролер).
до сих пор iv'e просто заполняет коллекции и устанавливает их в качестве источника элементов для каждого элемента управления
например:
Pipe23.ItemsSource = board.Pipes[23].Checkers;
я столкнулся с двумя проблемами:
(1)
ether создает двухстороннюю привязку с конвертером OwnerToColor в коде позади
который я не смог найти пример того, как это делается.
(2) создать эту привязку в разметке, но как мне инициализировать начальные элементы
в соответствующих трубах
например:
pipe23 starts with 2 checkers
board.Pipes[23].Checkers.Add(new Checker(true));
board.Pipes[23].Checkers.Add(new Checker(true));
любые хорошие примеры двухстороннего связывания между collection и itemsControl были бы очень полезны.
Элемент управления:
<ItemsControl Grid.Row="0" Grid.Column="0" Name="Pipe23" ItemTemplate="{StaticResource PipeDataItem}"/>
шаблон данных:
<DataTemplate x:Key="PipeDataItem" >
<Ellipse Width="45" Height="45" Fill="{Binding IsMine,Converter={StaticResource MyOwnerToColorConverter}}"></Ellipse>
</DataTemplate>