Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
1 / 1 / 0
Регистрация: 25.08.2009
Сообщений: 20
WPF

Подскажите как можно сделать биндинг элемента внутри DataGrid к полю из вью модели?

06.02.2024, 12:14. Показов 1305. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый день,

Хочу сделать форму с DataGrid с фильтрами в столбцах. Проблема заключается что я не могу прибиндить textbox с фильтром к полю в модели. Как я понимаю внутри DataGrid мой текстбокс находится в контексте подключенного списка. Если вынесу свой текстбок из дата грид, то биндинг работает. Подскажите как можно сделать биндинг внутри датагрида к полю из вью модели?

Элемент на форме
XML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<DataGrid x:Name="mercsDataGrid" ItemsSource="{Binding Mercs}" AutoGenerateColumns="False">
                <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding Index}" Header="Id">
                        <DataGridTextColumn.HeaderTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <TextBlock Text="{Binding Content, RelativeSource= {RelativeSource Mode=TemplatedParent}}"  />                              
                                    <TextBox Text="{Binding FilterIndex, UpdateSourceTrigger=PropertyChanged}" Width="50" Margin="5"/>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTextColumn.HeaderTemplate>
                    </DataGridTextColumn>
                </DataGrid.Columns>
            </DataGrid>
Код формы
C#
1
2
3
4
5
public MercsListViewPageUserControl()
        {
            InitializeComponent();
            var mercsVM = new MercViewModels();
            DataContext = mercsVM;
Вью модель
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
public ObservableCollection<MercModel> Mercs { get; private set; }
        private ICollectionView _mercsView;
 
        private int? _filterIndex;
        public int? FilterIndex
        {
            get => _filterIndex;
            set
            {
                _filterIndex = value;
                _mercsView.Refresh();
                OnPropertyChanged("FilterIndex");
            }
        }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.02.2024, 12:14
Ответы с готовыми решениями:

При изменении Вью Модели в окне не отображаются изменения, но фактически применяются к вью модели
Когда ставлю точку останова в обработчике закрытия окна, то там вижу обновленные данные. В чём может быть причина? Когда было сделано как я...

Подскажите, как в pandas сделать группировку по полю
Подскажите, как в pandas сделать группировку по полю 'SETTING_CODE'. Таблицы полностью идентичные, различия в названиях. Хочу получить...

Как поменять текст внутри вью полученного через layoutinflater?
Как поменять текст внутри вью полученного через layoutinflater? LayoutInflater inflater = getLayoutInflater(); View element1 =...

21
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
06.02.2024, 23:53
Студворк — интернет-сервис помощи студентам
Пример с Freezable Прокси:
C#
1
2
3
4
5
6
7
8
9
    public class SomeViewModel
    {
        public string SomeText { get; set; } = "qwerty";
 
        public ObservableCollection<Point> Points { get; }
            = new ObservableCollection<Point>(Enumerable.Range(1, 100).Select(i => new Point(i, rand.Next())));
 
        private static readonly Random rand = new Random();
    }
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
    public class Proxy<T> : Freezable
    {
        protected override Freezable CreateInstanceCore() => new Proxy<T>();
 
        public T Value
        {
            get { return (T)GetValue(ValueProperty); }
            set { SetValue(ValueProperty, value); }
        }
 
        // Using a DependencyProperty as the backing store for Value.  This enables animation, styling, binding, etc...
        public static readonly DependencyProperty ValueProperty =
            DependencyProperty.Register(nameof(Value), typeof(T), typeof(Proxy<T>), new PropertyMetadata(null));
 
        private static readonly Binding bindig = new();
        public Proxy()
        {
            // Задание привязки по умолчанию.
            // По ней Value будет получать текущий Контекст Привязок (DataContext).
            // При использовании, если нужно, то можно поменять или привязать свойство как угодно.
            BindingOperations.SetBinding(this, ValueProperty, bindig);
        }
    }
 
    public class Proxy : Proxy<object>
    { }
    public class SomeViewModelProxy : Proxy<object>
    { }
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
<Window x:Class="Core2023.Topics.travnik.Topic3153605.ExampleSomeWindow"
        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:Core2023.Topics.travnik.Topic3153605"
        mc:Ignorable="d"
        Title="ExampleSomeWindow" Height="450" Width="800">
    <!--Может получен  не только задиние, но и любым другим способом.-->
    <Window.DataContext>
        <local:SomeViewModel/>
    </Window.DataContext>
    <Window.Resources>
        <local:SomeViewModelProxy x:Key="vmproxy"/>
    </Window.Resources>
 
    <UniformGrid Rows="1">
        <TextBlock Text="{Binding SomeText}"/>
        <DataGrid ItemsSource="{Binding Points}">
             <DataGrid.Columns>
                    <DataGridTextColumn Binding="{Binding X}" Header="Id">
                        <DataGridTextColumn.HeaderTemplate>
                            <DataTemplate>
                                <StackPanel>
                                    <TextBox Text="{Binding Value.SomeText, Source={StaticResource vmproxy}, UpdateSourceTrigger=PropertyChanged}" Width="50" Margin="5"/>
                                </StackPanel>
                            </DataTemplate>
                        </DataGridTextColumn.HeaderTemplate>
                    </DataGridTextColumn>
                </DataGrid.Columns>
        </DataGrid>
    </UniformGrid>
</Window>
0
Модератор
Эксперт .NET
 Аватар для Элд Хасп
16166 / 11286 / 2892
Регистрация: 21.04.2018
Сообщений: 33,175
Записей в блоге: 2
20.02.2024, 15:27
Цитата Сообщение от travnik Посмотреть сообщение
а примерчика случаем не завалялось?
Можно быстро накидать. Но не сейчас - когда до дома доберусь.
Цитата Сообщение от travnik Посмотреть сообщение
Если кому интересно могу выложить исходник.
Конечно выкладывайте.
Это поможет тем кто заинтересуется таким же вопросом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.02.2024, 15:27

Как вытащить значение поля модели внутри самой модели
Здравствуйте. При написании моего проекта возник следующий вопрос. Имеется модель: class Candidate(models.Model): ...

Подскажите как сделать красную рамку внутри инпута?
Подскажите как сделать красную рамку внутри инпута?

Можно ли в datagrid сделать возможность выделять ячейки как в excel?
Например выделить все ячейки в столбце, и копипастнуть значения в выделенные ячейки?

Подскажите, пожалуйста, как сделать так, чтобы массив можно было вводить с клавиатуры, не понимаю, как сделать
#include &lt;iostream&gt; using namespace std; int main() { const int N = 10; int a = { 1, 25, 6, 32, 43, 5, 96, 23, 4, 55 }; ...

Как сделать чтобы к свойству модели можно было привязываться через VM
Есть модель Signal, есть ViewModel LogicalSwitchControl, и есть непосредственно сам View который нужно привязать к свойству SignalValue...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Новые блоги и статьи
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru