2016-07-25 9 views
-1

ich in der Lage war, die linkRefresh Datagrid-Daten auf TreeViewItem Auswahl ändern

Jetzt legte die unter Data Grid, um es für die Darstellung der Stadt Details wie Fläche, Bevölkerung, war Time-Zone etc.I Lage ich unter Verwendung der Baumansicht zu implementieren Um das Ereignis zu erhalten, wird IsSelected ausgewählt, indem der Name der Stadt aus der Baumansicht mit Beispiel ausgewählt wird. Aber wie binde ich die Daten des Stadtmodells (Area, Population, TimeZone) an ein Datagrid in der .xaml? Ich habe versucht, das CityViewModel direkt zu verwenden, aber es füllt nie die Daten. CityViewModel hat eine ObservableCollection von "CityTown" (mit Requisiten wie Area, Population, TimeZone usw.) -Eigenschaft namens "CityTowns", die ich fülle, wenn IsSelected ausgelöst wird.Meine Tree View hat Region -> Bundesland -> Stadthierarchie. Stadtstädte sollten im Raster nicht im Baum angezeigt werden.

//DemoWindow.xaml content: 
    <TabControl> 
      <TabItem Header="Load Towns"> 
      <StackPanel Orientation="Horizontal"> 
      <advanced: LoadOnDemandControl/> 
      <DataGrid ItemsSource="{Binding Path=local.CityViewModel.CityTowns}" 
        AutoGenerateColumns="False" IsReadOnly="True" 
       > 
        <DataGrid.Columns> 
         <DataGridTextColumn Binding="{Binding Path=Popluation}" Header="Popluation"/> 
         <DataGridTextColumn Binding="{Binding Path=Revenue}" Header="Revenue"/> 
         <DataGridTextColumn Binding="{Binding Path=TimeZone}" Header="TimeZone"/> 
         <DataGridTextColumn Binding="{Binding Path=Area}" Header="Area"/> 
        </DataGrid.Columns> 
      </DataGrid> 
      </StackPanel> 
     </TabItem> 
</TabControl> 

//LoadOnDemandCcontrol.xaml: 
      <TreeView ItemsSource="{Binding Regions}"> 
      <TreeView.ItemContainerStyle> 
      <!-- 
      This Style binds a TreeViewItem to a TreeViewItemViewModel. 
      --> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="IsExpanded" Value="{Binding IsExpanded, Mode=TwoWay}" /> 
       <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
       <Setter Property="FontWeight" Value="Normal" /> 
       <Style.Triggers> 
       <Trigger Property="IsSelected" Value="True"> 
        <Setter Property="FontWeight" Value="Bold" /> 
       </Trigger> 
       </Style.Triggers> 
      </Style> 
      </TreeView.ItemContainerStyle> 

      <TreeView.Resources> 
      <HierarchicalDataTemplate 
       DataType="{x:Type local:RegionViewModel}" 
       ItemsSource="{Binding Children}" 
       > 
       <StackPanel Orientation="Horizontal"> 
       <Image Width="16" Height="16" Margin="3,0" Source="Images\Region.png" /> 
       <TextBlock Text="{Binding RegionName}" /> 
       </StackPanel> 
      </HierarchicalDataTemplate> 

      <HierarchicalDataTemplate 
       DataType="{x:Type local:StateViewModel}" 
       ItemsSource="{Binding Children}" 
       > 
       <StackPanel Orientation="Horizontal"> 
       <Image Width="16" Height="16" Margin="3,0" Source="Images\State.png" /> 
       <TextBlock Text="{Binding StateName}" /> 
       </StackPanel> 
      </HierarchicalDataTemplate> 

      <DataTemplate DataType="{x:Type local:CityViewModel}"> 
       <StackPanel Orientation="Horizontal"> 
       <Image Width="16" Height="16" Margin="3,0" Source="Images\City.png" /> 
       <TextBlock Text="{Binding CityName}" /> 
       </StackPanel> 
      </DataTemplate> 
      </TreeView.Resources> 
     </TreeView> 

//CityTown.cs content: 
public class CityTown 
{ 
    public int Area { get; set; } 
    public int Population { get; set; } 
    public string TimeZone { get; set; } 
    public int Revenue { get; set; } 
    public virtual City City { get; set; } 
} 

//CityViewModel.cs cocntent 
public class CityViewModel : TreeViewItemViewModel 
{ 
    readonly City _city; 

    public CityViewModel(City city, StateViewModel parentState) 
     : base(parentState, false) 
    { 
     _city = city; 
    } 

    public string CityName 
    { 
     get { return _city.CityName; } 
    } 

    private ObservableCollection<CityTown> _CityTowns; 

    public ObservableCollection<CityTown> CityTowns 
    { 
     get { return Database.GetTowns(CityName); } 
     set { _CityTowns = value; } 
    } 

} 

//LoadOnDemandDemoControl.xaml.cs content: 
public partial class LoadOnDemandDemoControl : UserControl 
    { 
    public LoadOnDemandDemoControl() 
    { 
     InitializeComponent(); 

     Region[] regions = Database.GetRegions(); 
     CountryViewModel viewModel = new CountryViewModel(regions); 
     base.DataContext = viewModel; 
    } 
} 
+0

Bitte geben Sie den vollständigen XAML einschließlich Ihrer 'DataContext'-Deklaration an. – Jace

Antwort

0

Ich löste es durch die SelectedValuePath Eigenschaft für TreeView XAML Elementklasse definiert, und verwendet das gleiche in DataGrid Element ->ItemsSoruce Eigenschaft ->Path ->SelectedItem.ViewModelDataCollection.

Verwandte Themen