Iv'e получила библиотеку DLL, состоящую из 3-х классов, которые представляют собой настольную игру:WPF: Привязка коллекции к ItemsControl
Board , Pipe , Checker
доска представляет собой набор труб и труб представляют собой набор шашек
Движение противника будет состоять в том, чтобы удалить шашку из одной трубы и поместить ее в другую.
моя доска представлена сетчатая панель с 23 деталом-контролями, мне нужно связать каждый предмет-контроль на трубу так, чтобы отобразить движения на UI
движение игрока будет сделано падение сопротивления между itemcontrols (не удосужился этой части пока)
средство проверки Класс:
public Checker
{
public bool IsMine{get; set;}
}
свойство IsMine должно быть использовано для определения шашки Col или .
Труба Класс: держит 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;
}
то, что мне нужно сделать, это создать 2-полосные связывания между каждым ItemsControl и это соответствующий пунктом Pipe добавлением и удалением элементов, когда коллекция изменяется
Мне также нужен пользовательский конвертер, который проверяет свойство IsMine и соответственно устанавливает цвет объектов (элемент ItemsControl DataItemTemplate состоит из эллипса, который будет представлять каждую контрольную панель).
до сих пор 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 и коллекциями я попытался добавить эллипс к элементу управления элементом, который выбросил исключение о том, что без каких-либо предметов может быть добавлено, пока элемент управления используется. –