powered by simpleCommunicator - 2.0.35     © 2025 Programmizd 02
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / 2 таблицы раскраска строк
13 сообщений из 13, страница 1 из 1
2 таблицы раскраска строк
    #39785649
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте!
Есть 2 таблицы.
1 таблица с трока с идентификатором.
2-я содержит идентификаторы из 1 таблицы.

Задача при нажатии на строку 2-ой таблицы выделать строки в 1-ой таблице содержащие идентификаторы из столбцов 2-ой.
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785650
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
pooleet,
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785692
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это что лабораторная работа?
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785950
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

Это мое 1-е приложение на wpf и это только тот кусок который вызвал у меня вопросы.
Не вижу смысла перегружать вопрос кодом не относящимся к вопросу. Не совсем понимаю привязку между элементами. Хочу на простом примере разобраться.
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785966
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pooleetтот кусок который вызвал у меня вопросы.я лично не нашел ни одного вопроса в вашем сообщении
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785969
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример для выделения 1-го элемента в 1-й таблице
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<Window x:Class="wpf2Table.MainWindow"
        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:wpf2Table"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <DataGrid Grid.Row="0" ItemsSource="{Binding ItemList}"  SelectedItem="{Binding SelectedItem}"/>

        <DataGrid Grid.Row="1" ItemsSource="{Binding ItemList2}" SelectedItem="{Binding SelectedItem2}"/>

    </Grid> 
    
</Window>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
  public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = new MainViewModel();
        }
    }



Модели
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
 public class Item
    {
        public int id { get; set; }
        public string Name { get; set; }
    }

   public class Item2
    {

        public int ID { get; set; }

        public int ID2 { get; set; }

        public int ID3 { get; set; }

    }



ViewModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
 public class MainViewModel:BaseModel
    {
        public List<Item> ItemList { get; set; }

        public List<Item2> ItemList2 { get; set; }


        /// <summary>
        /// Выбранные элементы в 1-й таблице
        /// </summary>
        private Item _SelectedItem;

        public Item SelectedItem
        {
            get { return _SelectedItem; }
            set { _SelectedItem = value; OnPropertyChanged(); }
        }


        /// <summary>
        /// Выбранный элемент во 2-й таблице
        /// </summary>
        private Item2 _SelectedItem2;

        public Item2 SelectedItem2
        {
            get { return _SelectedItem2; }
            set {
                _SelectedItem2 = value;
                var Finded = ItemList.Where(f=>f.id==value.ID2 || f.id == value.ID3);

                if (Finded.Any())
                {
                    SelectedItem = Finded.FirstOrDefault();
                }

            }
        }



        public MainViewModel()
        {
            ItemList = new List<Item>()
            {
               new Item { id=1, Name="Apple1"},
               new Item { id=2, Name="Apple2"},
               new Item { id=3, Name="Apple3"},
            };


            ItemList2 = new List<Item2>
         {
            new Item2 { ID=1, ID2=2},
            new Item2 { ID=2, ID2=2, ID3=3},
            new Item2 { ID=3, ID3=1},
        };

        }
    }



Базовая ViewModel
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
   /// <summary>
    /// OnPropertyChanged для моделей
    /// </summary>

    public abstract class BaseModel : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler PropertyChanged;

        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
        }

        public BaseModel()
        {

        }
    }
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785971
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,

если легче по недоделанному проекту, то это действие нужно сделать с таблицами провод (1) и катушка (2). данные из текстового файла (открыть проект)
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39785983
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pooleet,
у тебя неверная постановка задачи- такой функционал, который ты хочешь имеет 0% полезности.
Если ты хочешь выделять цветом строки в 1-м DataGrid по условию выделения во 2-м, то для этого не нужно делать Selected, нужно использовать DataTrigger для строки. Тем более если у тебя в первом DataGrid будет много строк, то ты не увидишь выделенные строки.
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39786395
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub,
Спасибо за пример, попробую тогда через триггеры сделать
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39788252
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
делаю так. пока хочу все строки красным закрасить без условия, ничего не происходит.
Если не сложно покажите пример правильной привязки

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
            <DataGrid.Resources>
                <Style TargetType="{x:Type DataGridRow}">
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding ColorRoww}" Value="false">
                            <Setter Property="Background" Value="Red" />
                        </DataTrigger>
                    </Style.Triggers>
                </Style>
            </DataGrid.Resources>



Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 private bool _ColorRoww = false;
        public bool ColorRoww
        {

            get { return _ColorRoww; }
            set
            {
                _ColorRoww = value;
                OnPropertyChanged();
            }
        }
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39788425
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pooleet,

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<Window x:Class="wpf2Table.MainWindow"
        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:wpf2Table"
        mc:Ignorable="d"
        Title="MainWindow" Height="450" Width="800">
    <Grid>
        <Grid.Resources>
            <Style TargetType="{x:Type DataGridRow}">
                <Style.Triggers>
                    <DataTrigger Binding="{Binding Triggered}" Value="True">
                        <Setter Property="Background" Value="Red" />
                    </DataTrigger>
                    
                    <DataTrigger Binding="{Binding Triggered}" Value="False">
                        <Setter Property="Background" Value="Green" />
                    </DataTrigger>
                </Style.Triggers>
            </Style>
        </Grid.Resources>
        
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <DataGrid Grid.Row="0" ItemsSource="{Binding ItemList}"  SelectedItem="{Binding SelectedItem}"/>

        <DataGrid Grid.Row="1" ItemsSource="{Binding ItemList2}" SelectedItem="{Binding SelectedItem2}"/>

        <Button Width="80" Height="30" HorizontalAlignment="Right"  Command="{Binding TriggerCommand}"  Margin="5" VerticalAlignment="Bottom"/>

    </Grid>
      




Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
    public class MainViewModel:BaseModel
    {
        public List<Item> ItemList { get; set; }

        public List<Item2> ItemList2 { get; set; }


        /// <summary>
        /// Вызвать изменение свойства, которое слушает DataTrigger
        /// </summary>
        public ICommand TriggerCommand { get; set; }

        /// <summary>
        /// Выбранные элементы в 1-й таблице
        /// </summary>
        private Item _SelectedItem;

        public Item SelectedItem
        {
            get { return _SelectedItem; }
            set { _SelectedItem = value; OnPropertyChanged(); }
        }


        /// <summary>
        /// Выбранный элемент во 2-й таблице
        /// </summary>
        private Item2 _SelectedItem2;

        public Item2 SelectedItem2
        {
            get { return _SelectedItem2; }
            set {
                _SelectedItem2 = value;
                var Finded = ItemList.Where(f=>f.id==value.ID2 || f.id == value.ID3);

                if (Finded.Any())
                {
                    SelectedItem = Finded.FirstOrDefault();
                }

            }
        }



        public MainViewModel()
        {
            ItemList = new List<Item>()
            {
               new Item { id=1, Name="Apple1"},
               new Item { id=2, Name="Apple2"},
               new Item { id=3, Name="Apple3"},
            };


            ItemList2 = new List<Item2>
         {
            new Item2 { ID=1, ID2=2},
            new Item2 { ID=2, ID2=2, ID3=3},
            new Item2 { ID=3, ID3=1},
        };

            TriggerCommand = new RelayCommand(()=>MakeTrigger());


        }

        private void MakeTrigger()
        {
            ItemList.First().Triggered = !ItemList.First().Triggered;
        }
    }


    public class Item:BaseModel
    {
        public int id { get; set; }
        public string Name { get; set; }

        /// <summary>
        /// Вызов DataTrigger
        /// </summary>

        private bool _Triggered;
        public bool Triggered
        {
            get { return _Triggered; }
            set { _Triggered = value;OnPropertyChanged(); }
        }

    }
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39789325
pooleet
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vb_sub, Спасибо )))))

у меня получилось так
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
private Item2 _SelectedItem2;

        public Item2 SelectedItem2
        {
           
            get { return _SelectedItem2; }
            set
            {
                 ItemList.ForEach(x => x.Triggered = false);
                _SelectedItem2 = value;
                ItemList.FindAll(s => s.id== _SelectedItem2.ID2).ForEach(x => x.Triggered = true );
                ItemList.FindAll(s => s.id == _SelectedItem2.ID3).ForEach(x => x.Triggered = true);

  
            }
        }
...
Рейтинг: 0 / 0
2 таблицы раскраска строк
    #39789489
vb_sub
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
    ItemList.FindAll(s => s.id== _SelectedItem2.ID2 || s.id== _SelectedItem2.ID3).ForEach(x => x.Triggered = true );
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / WPF, Silverlight [игнор отключен] [закрыт для гостей] / 2 таблицы раскраска строк
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]