Как я могу динамически создать окно WPF из базы данных со связанными таблицами? - PullRequest
2 голосов
/ 22 апреля 2019

Я пытаюсь создать настраиваемую табло для управления нашими клиентскими комнатами.

Таблица 1 с именем Rooms [RoomID, RoomNumber, RoomDescription, ADA, RoomStatus]

Таблица 2 с именем Beds [BedID, BedNumber, RoomID, BedEnabled]

Таблица3 с именем Clients [ClientID, BedID, RoomID and other fields for client information]

С комнатой может быть связано более 1 кровати.Например, в комнате 101 есть 2 кровати, и мы можем назначить 2 клиентов на комнату 101.

Я пытался использовать Grid и StackPanel для вывода списка всех комнат.Затем в каждой комнате перечислите все кровати, затем для каждой кровати, если назначен клиент, я собирался использовать TextBlock для отображения информации о клиенте.Я понимаю, что это не то, что я могу сделать прямо в xaml, но, вероятно, нужно сделать некоторый код с циклами?

<Window x:Class="BoardDisplay.Window1"        
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:local="clr-namespace:BoardDisplay"
        mc:Ignorable="d"
        Title="Window1" Height="450" Width="800" Loaded="Window_Loaded">
    <Window.Resources>
        <local:Room_ManagerDataSet x:Key="room_ManagerDataSet"/>
        <CollectionViewSource x:Key="roomsViewSource" Source="{Binding Rooms, Source={StaticResource room_ManagerDataSet}}"/>
        <CollectionViewSource x:Key="bedsViewSource" Source="{Binding Beds, Source={StaticResource room_ManagerDataSet}}"/>
    </Window.Resources>
    <Grid Margin="10">
        <ItemsControl ItemsSource="{Binding Source={StaticResource roomsViewSource}}">
            <ItemsControl.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel />
                </ItemsPanelTemplate>
            </ItemsControl.ItemsPanel>
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding RoomNumber}" Margin="0,0,5,5">
                        <Grid>
                            <ItemsControl ItemsSource="{Binding Source={StaticResource bedsViewSource}}">
                                <ItemsControl.ItemsPanel>
                                    <ItemsPanelTemplate>
                                        <StackPanel/>
                                    </ItemsPanelTemplate>
                                </ItemsControl.ItemsPanel>
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <TextBlock Text="{Binding BedNumber}"/>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </Grid>
                    </TextBlock>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </Grid>
</Window>

1 Ответ

1 голос
/ 07 мая 2019

Если вы сделаете правильное связывание, я думаю, что в вашем случае это возможно, тогда вам следует использовать updateourcetrigger, как этот

https://stackoverflow.com/a/22253816/914284

Text="{Binding Path=SelectedCollectionDevice.BaudRate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}

Также вы можете использовать упаковщик

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...