0
我有兩列:left包含2級TreeView供應商/類別和包含DataGrid產品的權利。我想單擊TreeView層次結構(供應商或類別),並根據所選供應商或類別刷新DataGrid,換句話說,應該只顯示屬於選定供應商或類別的產品。 的代碼看起來像這樣:如何從TreeView動態刷新DataGrid
<Window x:Class="Replen.Window2"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sys="clr-namespace:System;assembly=mscorlib"
xmlns:local="clr-namespace:Replen"
Title="North Reports" Height="550" Width="1180">
<Window.Resources>
<ObjectDataProvider IsAsynchronous="True" x:Key="productNorthProvider" ObjectType=" {x:Type local:ProductNorthDB}" MethodName="GetProductNorthList">
<ObjectDataProvider.MethodParameters>
<sys:String>1</sys:String>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="220" />
<ColumnDefinition Width="5" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="300"/>
<RowDefinition Height="5"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<GridSplitter VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" ShowsPreview="True"
Grid.Column="1" Grid.RowSpan="3" ResizeBehavior="PreviousAndNext"
Width="5" Background="LightSteelBlue" />
<GridSplitter VerticalAlignment="Stretch"
HorizontalAlignment="Stretch" ShowsPreview="True"
Grid.Row="1" Grid.ColumnSpan="3" ResizeBehavior="PreviousAndNext"
Height="5" Background="LightSteelBlue"/>
<Border Grid.Column="0" Grid.Row="0" Padding="0" Margin="0" Background="LightSteelBlue" Grid.RowSpan="3">
<TreeView Name="treeSuppliersCategories" Margin="5, 5, 0, 5" FontSize="12" Grid.RowSpan="2">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding SupplierCategoryNorth}">
<TextBlock Text="{Binding SupplierNorthName}" Padding="2"/>
<HierarchicalDataTemplate.ItemTemplate >
<DataTemplate >
<TextBlock Name="categoryCode" VerticalAlignment="Center">
<TextBlock.Text>
<MultiBinding StringFormat=" {0} {1}">
<Binding Path="CategoryNorthCode" />
<Binding Path="CategoryNorthName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
</DataTemplate>
</HierarchicalDataTemplate.ItemTemplate>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</Border>
<Border Grid.Column="2" Grid.Row="0" Padding="0" Margin="0" Background="LightSteelBlue">
<DataGrid Grid.Column="2" Grid.Row="2" x:Name="gridProductsNorth" Margin="0, 5, 5, 0" AutoGenerateColumns="False"
ItemsSource="{Binding Source={StaticResource productNorthProvider}}" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="Product" Width="60" Binding="{Binding Path=ProductNorthCode}"></DataGridTextColumn>
<DataGridTextColumn Header="Product Name" Width="160" Binding="{Binding Path=ProductNorthName}" ></DataGridTextColumn>
<DataGridTextColumn Header="Supplier" Width="60" Binding="{Binding Path=SupplierNorthCode}"></DataGridTextColumn>
<DataGridTextColumn Header="Supplier Name" Width="160" Binding="{Binding Path=SupplierNorthName}"></DataGridTextColumn>
<DataGridTextColumn Header="Category" Width="60" Binding="{Binding Path=CategoryNorthCode}" ></DataGridTextColumn>
<DataGridTextColumn Header="Category Name" Width="100" Binding="{Binding Path=CategoryNorthName}" ></DataGridTextColumn>
<DataGridTextColumn Header="Unit Price" Width="70" Binding="{Binding Path=UnitPrice}"></DataGridTextColumn>
<DataGridTextColumn Header="In Stock" Width="70" Binding="{Binding Path=UnitsInStock}"></DataGridTextColumn>
<DataGridTextColumn Header="On Order" Width="70" Binding="{Binding Path=UnitsOnOrder}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Border>
</Grid>
</Window>}
數據來自SQL Server數據庫。我很感謝你的幫助。 很多謝謝
感謝馬無限極的建議MVVM。我顯然會在未來看到它。有沒有其他解決方案可以適用於我目前的案例?即使你建議MVVM在這種情況下可能會更好,我相信還有另一種方法來處理這個問題。 – Leszek 2012-07-15 09:07:47
有許多方法可以解決這個問題。 MVVM對我來說只是最快和最可維護的方法。 – 2012-07-15 09:10:50