尝试对 Listview/Gridview 做与我对 DataGrid 所做的相同的事情

Trying to do same thing with Listview/Gridview as I'm doing with DataGrid

伙计们!

我目前有这个使用 WCF 和 LINQ 的 WPF 项目:

MainWindow.xaml

<GroupBox Header="Available Rooms" >
    <DataGrid Name="roomDataGrid" ItemsSource="{Binding Rooms}" AutoGenerateColumns ="False" ">
        <DataGrid.Columns>
            <DataGridTextColumn Header="Room" Binding="{Binding RoomId}" />
            <DataGridTextColumn Header="Reserved" Binding="{Binding RoomTaken}" />
            <DataGridTextColumn Header="Beds" Binding="{Binding Beds}" />
            <DataGridTextColumn Header="Size" Binding="{Binding Size}" />
            <DataGridTextColumn Header="Rank" Binding="{Binding RoomRank}" />
        </DataGrid.Columns>
    </DataGrid>
</GroupBox>

MainWindow.xaml.cs

public MainWindow()
    {
        InitializeComponent();
        viewModel = new ViewModel();
        this.DataContext = viewModel;
    }   

ViewModel.cs

public class ViewModel
    {
        HotelService.HotelServiceClient hotelServiceClient = new HotelService.HotelServiceClient();

        public List<RoomModel> Rooms
        {
            get
            {
                return hotelServiceClient.GetRooms().ToList();
            }
        }
    }   

正如你们所见,我只是设置了 this.DataContext = viewModel 并且几乎通过纯粹的 Magic,WPF 显示了房间的数据库列表。

但我的问题如下。无论如何我可以使用 GridView/Listview 实现同样的事情吗?我尝试用这些对象替换 xaml,但是 window 中没有显示任何内容。

额外的问题:有没有根据events/delegates使用GridView/ListView,这样我就可以将房间保存到数据库并更新视图,并在有时更新视图不是由该 WPF 引起的对数据库所做的更改?

希望我提供了足够的信息!提前致谢:)

试试这个:

<GroupBox Header="Available Rooms" >
<ListView Name="roomDataGrid" ItemsSource="{Binding Rooms}" >
    <ListView.View>
      <GridView>
              <GridViewColumn Header="Room" DisplayMemberBinding="{Binding RoomId}" />
        <GridViewColumn Header="Reserved" DisplayMemberBinding="{Binding RoomTaken}" />
        <GridViewColumn Header="Beds" DisplayMemberBinding="{Binding Beds}" />
        <GridViewColumn Header="Size" DisplayMemberBinding="{Binding Size}" />
        <GridViewColumn Header="Rank" DisplayMemberBinding="{Binding RoomRank}" />
      </GridView>
    </ListView.View>
</ListView>