Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // C# part:
- class NotifyPropertyChangedImpl : INotifyPropertyChanged
- {
- protected void NotifyPropertyChanged([CallerMemberName] string name = "")
- {
- if (PropertyChanged != null)
- PropertyChanged(this, new PropertyChangedEventArgs(name));
- }
- public event PropertyChangedEventHandler PropertyChanged;
- }
- class Data : NotifyPropertyChangedImpl
- {
- private bool _isParentSelected;
- public bool IsParentSelected
- {
- get { return this._isParentSelected; }
- set
- {
- this._isParentSelected = value;
- NotifyPropertyChanged();
- }
- }
- public string Title { get; set; }
- }
- class ParentData : NotifyPropertyChangedImpl
- {
- private bool _isSelected;
- public bool IsSelected
- {
- get { return this._isSelected; }
- set
- {
- this._isSelected = value;
- NotifyPropertyChanged();
- if (First != null)
- First.IsParentSelected = value;
- if (Second != null)
- Second.IsParentSelected = value;
- }
- }
- public Data First { get; set; }
- public Data Second { get; set; }
- }
- class MainVM
- {
- public IEnumerable<ParentData> Hierarchical { get; set; }
- public IEnumerable<Data> Flat { get; set; }
- }
- public partial class App : Application
- {
- protected override void OnStartup(StartupEventArgs e)
- {
- base.OnStartup(e);
- var data = new[]
- {
- new ParentData()
- {
- First = new Data() { Title = "Big" },
- Second = new Data { Title = "Bad" }
- },
- new ParentData()
- {
- First = new Data() { Title = "Gray" },
- Second = new Data { Title = "Wolf" }
- }
- };
- var mainVM = new MainVM()
- {
- Hierarchical = data,
- Flat = data.SelectMany(pd => new[] { pd.First, pd.Second }).ToArray()
- };
- var mainWindow = new MainWindow() { DataContext = mainVM };
- mainWindow.Show();
- }
- }
- <!-- XAML part -->
- <Application x:Class="Test.App"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
- </Application>
- <Window x:Class="Test.MainWindow"
- xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
- xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
- xmlns:local="clr-namespace:Test"
- Title="MainWindow" Height="350" Width="525">
- <Grid>
- <Grid.ColumnDefinitions>
- <ColumnDefinition/>
- <ColumnDefinition/>
- </Grid.ColumnDefinitions>
- <DataGrid ItemsSource="{Binding Hierarchical}" AutoGenerateColumns="False">
- <DataGrid.ItemContainerStyle>
- <Style TargetType="DataGridRow">
- <Setter Property="IsSelected" Value="{Binding IsSelected}"/>
- </Style>
- </DataGrid.ItemContainerStyle>
- <DataGrid.Columns>
- <DataGridTemplateColumn Header="First">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate DataType="{x:Type local:ParentData}">
- <TextBlock Text="{Binding First.Title}" Name="tb"/>
- <DataTemplate.Triggers>
- <DataTrigger Binding="{Binding IsSelected}" Value="True">
- <Setter Property="Background" TargetName="tb" Value="Yellow"/>
- </DataTrigger>
- </DataTemplate.Triggers>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- <DataGridTemplateColumn Header="Second">
- <DataGridTemplateColumn.CellTemplate>
- <DataTemplate DataType="{x:Type local:ParentData}">
- <TextBlock Text="{Binding Second.Title}" Name="tb"/>
- <DataTemplate.Triggers>
- <DataTrigger Binding="{Binding IsSelected}" Value="True">
- <Setter Property="Background" TargetName="tb" Value="Green"/>
- </DataTrigger>
- </DataTemplate.Triggers>
- </DataTemplate>
- </DataGridTemplateColumn.CellTemplate>
- </DataGridTemplateColumn>
- </DataGrid.Columns>
- </DataGrid>
- <ItemsControl ItemsSource="{Binding Flat}" Grid.Column="1">
- <ItemsControl.ItemTemplate>
- <DataTemplate DataType="{x:Type local:Data}">
- <TextBlock Text="{Binding Title}" Name="tb"/>
- <DataTemplate.Triggers>
- <DataTrigger Binding="{Binding IsParentSelected}" Value="True">
- <Setter Property="Background" TargetName="tb" Value="Blue"/>
- </DataTrigger>
- </DataTemplate.Triggers>
- </DataTemplate>
- </ItemsControl.ItemTemplate>
- </ItemsControl>
- </Grid>
- </Window>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement