动态创建按钮网格并绑定其文本值
本文关键字:文本 绑定 创建 按钮 网格 动态 | 更新日期: 2023-09-27 17:50:14
我实际上有两个问题。
我正在WPF(连接到asp.net webservice)中的电影项目上工作。在视图上,我必须显示一场演出的所有预订,为此,我需要在视图上显示类似网格的东西,以显示一个房间中的所有座位(显示哪个座位是空闲的/预订的/已售出的)。
首先,网格只有一个按钮(在菜单中),它绑定到一个命令(LoadReservationCommand)来加载所有数据。在此之前,视图模型不知道网格的大小,因此应该动态创建它。这可能吗?
一旦我有了网格(例如buttongrid),我应该将其文本值绑定到来自视图模型的字符串数组(free、reserved、sold)的数组。有没有办法用索引来绑定它?这是我的ViewModel构造函数的第一部分。
谢谢你的帮助!
public ReservationViewModel(IMoziAdminModel model, PerformanceDTO performance)
{
_model = model;
_performance = performance;
LoadReservationCommand = new DelegateCommand(async (param) =>
{
//We need to find in which room the performance will be
try
{
await _model.RoomLoadAsync();
Rooms = new ObservableCollection<RoomDTO>(_model.Rooms);
}
catch
{
OnMessageApplication("Error (Loading)");
}
foreach (var r in Rooms)
{
if (r.Room_Id == _performance.Room_Id)
{
row = r.Rows;
column= r.Columns;
}
} //And now we know how big the room is, and we could create the buttongrid.
......
});
.......
}
"字符串数组的数组" ?来吧!
enum SeatState {
Free,
// ...
}
class Seat {
ICommand Buy { get; private set; }
SeatState State { get; private set; }
// ...
}
class Room {
int Rows { get; private set; }
int Colums { get; private set; }
IEnumerable<Seat> Seats { get; private set; }
// ...
}
class ViewModel : BaseClassImplementingINotifyPropertyChange {
Room CurrentRoom {
get { ... }
private set { ... } // Raise event
}
ICommand LoadCurrentRoom { get; private set; }
}
view
<...>
<ItemsControl ItemsSource="{Binding CurrentRoom.Seats}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid
Columns="{Binding CurrentRoom.Columns}"
Rows="{Binding CurrentRoom.Rows}"
/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Button Command="{Binding Buy}">
<TextBlock Text="{Binding State}"/>
</Button>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</...>
您可以将这些按钮添加到视图模型的集合中,然后将其绑定到ListView, ListView将根据您指定的模板生成按钮。