我实际上有两个问题。
我正在使用WPF中的Cinema项目(连接到asp.net webservice)。在一个视图中,我必须显示一个表演的所有预订,为此我需要在我的视图中显示一个网格,以显示一个房间中的所有座位(以显示哪个座位是免费/保留/出售的)。
首先,网格只有一个按钮(在菜单中),该按钮绑定到命令( LoadReservationCommand )以加载所有数据。在此之前,视图模型并不知道网格的大小,因此应该动态创建它。这可能吗?
一旦我有了网格(例如buttongrid),我应该将它的文本值绑定到一个字符串数组(free,reserved,sold),它来自viewmodel。有没有办法以某种方式将其与索引绑定?
这是我的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.
......
});
.......
}
答案 0 :(得分:0)
您可以将这些按钮添加到viewmodel上的集合中,然后将其绑定到ListView,这将根据您指定的模板生成按钮。
答案 1 :(得分:0)
&#34;一串字符串数组&#34; ? C&#39;星期一!比那更多OO!
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; }
}
然后是视图
<...>
<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>
</...>