K napsání této krátké úvahy mě inspiroval nedávný článek zde o tom, jak je ve WPF jednoduché udělat Master – Detail binding. Takže se zdá, že pracovat s daty bude hračka. Dokonce lze využít LINQ to SQL (de facto vlastně LINQ to COKOLI) a “jenom” to pospojovat.
Jenomže ono to nebude tak jednoduché. XAML soubory nebývají na dva řádky. Tohle je, na ukázku, XAML soubor z toho odkazu výše. Přestože příklad je primitivní, pár písmenek se tam najde. A je třeba tam dopsat informace o propojení na zdroje dat.
<Window x:Class="MasterDetailView.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Master - Detail View" Height="400">
<Grid x:Name="gridMasterDetail">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="200" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="200" />
<ColumnDefinition Width="200" />
</Grid.ColumnDefinitions>
<DockPanel Grid.Column="0">
<Label DockPanel.Dock="Top">Region</Label>
<ListBox ItemsSource="{Binding}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"/>
</DockPanel>
<DockPanel Grid.Column="1">
<Label DockPanel.Dock="Top">Division</Label>
<ListBox ItemsSource="{Binding Path=Divisions}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name" />
</DockPanel>
<DockPanel Grid.Column="2">
<Label DockPanel.Dock="Top">City</Label>
<ListBox ItemsSource="{Binding Path=Divisions/Cities}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name"/>
</DockPanel>
<DockPanel Grid.Column="3">
<Label DockPanel.Dock="Top">District</Label>
<ListBox ItemsSource="{Binding Path=Divisions/Cities/Districts}" IsSynchronizedWithCurrentItem="True" DisplayMemberPath="Name" />
</DockPanel>
<DockPanel Grid.Column="4">
<Label DockPanel.Dock="Top">Street</Label>
<ListBox ItemsSource="{Binding Path=Divisions/Cities/Districts/Streets}" DisplayMemberPath="Name" />
</DockPanel>
</Grid>
</Window>
Databázové aplikace, které typicky píšu, mívají v tabulce nějakých 35 sloupců, takže na formulářích je při bindingu docela nacpáno ;-)) Zatímco nápad s Binding Path je prostě skvělý, docela mi chybí možnost ty informace o Itemssource a DisplayMemberPath nějak smysluplně dostat do XAML souboru. Třeba pomocí okna Properties.
Dělal už někdo ze čtenářů nějakou Databázovou WPF aplikaci? Jak jste to řešili? A nevíte, jestli je ve VS 2010 v tomto ohledu nějak chudákovi vývojáři práce usnadněna?