WPF:将集合绑定到项控件
本文关键字:控件 绑定 集合 WPF | 更新日期: 2023-09-27 18:24:52
iv'e得到了一个由3个类组成的dll,这些类代表一个棋盘游戏:
Board , Pipe , Checker
棋盘是管道的集合,管道是棋盘的集合
对手的动作将包括从一个管道中取出一个方格,然后将其放入另一个管道。
我的董事会由一个带有23个项目控件的网格面板表示,我需要将每个项目控件绑定到一个管道,以便在UI 上显示移动
玩家的移动将通过在项目控件之间拖放来完成
检查器类:
public Checker
{
public bool IsMine{get; set;}
}
需要使用IsMine属性来确定Checkers颜色。
管道类:持有一个可观察的棋盘集合
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;
}
我需要做的是在每个itemscontrol和它对应的管道项目之间创建一个双向绑定,当集合更改时添加和删除项目
我还需要一个自定义转换器,它将检查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>
Binding b = new Binding();
b.Source = board.Pipes[23];
b.UpdateSourceTrigger = UpdateSourceTrigger.PropertyChanged;
b.Path = new PropertyPath("Checkers");
Pipe23.SetBinding(ListBox.ItemsSourceProperty, b);