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

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

Это мое 1-е приложение на wpf и это только тот кусок который вызвал у меня вопросы.
Не вижу смысла перегружать вопрос кодом не относящимся к вопросу. Не совсем понимаю привязку между элементами. Хочу на простом примере разобраться.
...
Рейтинг: 0 / 0
14.03.2019, 13:40
    #39785966
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 таблицы раскраска строк
pooleetтот кусок который вызвал у меня вопросы.я лично не нашел ни одного вопроса в вашем сообщении
...
Рейтинг: 0 / 0
14.03.2019, 13:42
    #39785969
vb_sub
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 таблицы раскраска строк
Пример для выделения 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
14.03.2019, 13:42
    #39785971
pooleet
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
2 таблицы раскраска строк
vb_sub,

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

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


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