Форум программистов, компьютерный форум, киберфорум
C#: WPF, UWP и Silverlight
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626

Поясните по binding

18.02.2016, 08:48. Показов 2441. Ответов 11
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте! Разбираюсь с привязкой данных. Есть простое приложение, которое на главном окне содержит Label (Label1), есть класс Class1.cs, который содержит открытую переменную:
C#
1
public int Test { get; set; }
Хочу настроить привязку этой переменной к Label1.Content. Написал такой код:
C#
1
2
3
4
5
6
7
8
public MainWindow()
        {
            InitializeComponent();
            Class1 cl = new Class1();
            Binding binding = new Binding();
            binding.ElementName = cl.Test.ToString();
            Label1.SetBinding(Label.Content, binding);
        }
Получаю ошибку, что для нестатического поля или метода Label.Content нужна ссылка на объект.
Если ставлю Label1.Content, то опять ошибка, ему нужен в качестве первого аргумента Dependency Properties. Как правильно биндинг в коде привязать?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.02.2016, 08:48
Ответы с готовыми решениями:

Передать внутри Binding в ConverterParameter ссылку на окно содержащее объект, который использует Binding
В главном окне в ресурсах есть Контекстные меню. У программы есть "Ручной режим", если режим тру. то подставить одно контекстное меню....

Binding
Добрый день! Подскажите, пожалуйста, можно ли в данном случае свойство Text элемента TextBlock (Text="Длина участка (км)")...

Binding x:Name
Доброго времени суток. Подскажите пожалуйста как в Style получить наименование котнрола: Пример: GridView: ...

11
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
18.02.2016, 09:35
В метод SetBinding нужно передать объект типа DependencyProperty. Label.Content имеет тип object. Чтобы всё заработало, вам нужно передать Label.ContentProperty.
Цитата Сообщение от Chizel Посмотреть сообщение
Разбираюсь с привязкой данных
Предполагаю, что Вы неправильно начинаете с ней разбираться. Привязка не должна создаваться в коде C# (только если Вы не создаёте какое-то сложное, нестандартное поведение). О привязка данных можно почитать здесь.
Так же предлагаю Вам ознакомиться с WPF на двух небольших примерах (примеры создавались не конкретно для Вас, но думаю, что Вы сможете разобраться)
MVVM Sample - небольшой пример, демонстрирующий использование паттерна MVVM в приложении WPF. MVVM - рекомендуемый паттерн проектирования приложения WPF. Примеры привязок данных в этом примере тоже есть. Все они прописываются в xaml-файлах
WPF Converters Sample - пример, демонстрирующий использование конвертеров значений в приложении WPF
Вложения
Тип файла: rar MVVM Sample.rar (65.9 Кб, 27 просмотров)
Тип файла: rar WPF Converters Sample.rar (69.7 Кб, 20 просмотров)
2
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
18.02.2016, 10:23  [ТС]
Цитата Сообщение от novikov.ea Посмотреть сообщение
О привязка данных можно почитать здесь.
А я там смотрел уже. Просто подумал, раз я шарп изучаю, то и привязки делать в коде лучше, а не в XAML разметке.
Примеры посмотрю, попробую разобраться.
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
18.02.2016, 10:31
Цитата Сообщение от Chizel Посмотреть сообщение
привязки делать в коде лучше, а не в XAML разметке
Это неправильное суждение) Вам, конечно, никто не запрещает создавать привязку в коде. Но WPF не для того, я дума, создавался)
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
18.02.2016, 10:51  [ТС]
novikov.ea, ну, вот я родил такое в XAML разметке, вроде должно работать
XML
1
<Label Name="Label1" Content="{Binding Source={StaticResource cl}, Path=Test}" FontSize="30" Margin="100, 100" VerticalAlignment="Center"></Label>
А я получаю: "Не удалось разрешить ресурс "cl". Что опять не так?
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
18.02.2016, 11:19
Что такое cl у вас? Вы, наверное, вырвали кусок кода из какого-то примера и пытаетесь его оживить.
Посмотрите на указанные выше примеры в архивах. Там уже всё работает, поизучайте их.
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
18.02.2016, 11:24  [ТС]
novikov.ea, я ведь не студент, который курсовую пишет и дергает из разных источников куски кода
Все пишу сам, чтобы разобраться. cl - экземпляр класса Class1, который содержит нужную мне переменную Test.
C#
1
2
3
4
5
public MainWindow()
        {
            InitializeComponent();
            Class1 cl = new Class1();
        }
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
18.02.2016, 11:33
Понятно. cl - это некая переменная, созданная внутри MainWindow. Это я вижу. Однако этого не видят элементы управления, которые находятся в MainWindow.
Для того, чтобы отобразить данные в MainWindow с помощью привязки данных, можно сделать следующее:
Создать ViewModel'ку для MainWindow, создать у неё свойство Test и привязаться к свойству Test. Как всё это делается можно посмотреть в примере MVVM Sample.
Это самый нормальный способ. Есть ещё решения-костыли (типа засунуть экземпляр Class1 в ресурсы или привязать MainWindow саму на себя). Но они все не позволять хорошо управлять приложением.
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
18.02.2016, 11:45  [ТС]
novikov.ea, да, я смотрю ваш пример. Только сейчас догадался развернуть ViewModel в Visual Studio.
Я правильно понимаю, что мне мой Class1 нужно сделать ViewModel'кой для MainWindow и уже тогда в него читать и писать все что угодно не создавая экземпляра?
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
18.02.2016, 11:53
Лучший ответ Сообщение было отмечено Chizel как решение

Решение

Я не знаю, что такое Class1. Пусть это будет класс с некоторым алгоритмом или данными (т.е. в понятии MVVM будет моделью)
Class1 нужно создать в MainWindowViewModel.
MainWindowViewModel вызывает методы Class1.
Class1 что-то делает и возвращает результат.
MainWindowViewModel изменяет свои свойства в зависимости от результата, возвращенного Class1.
MainWindow "видит", что свойства MainWindowViewModel изменились и обновит их отображение на экране (сработает привязка данных)

В моём примере нет объектов уровня "модель". Но общий принцип действий я описал.
1
32 / 15 / 5
Регистрация: 19.11.2014
Сообщений: 626
18.02.2016, 12:24  [ТС]
novikov.ea, а как этот паттерн подключить к моему WPF приложению? У меня таких папок и файлов нет, руками создавать?
0
Эксперт .NET
 Аватар для novikov.ea
1857 / 1363 / 429
Регистрация: 10.06.2011
Сообщений: 2,136
18.02.2016, 12:29
Да.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.02.2016, 12:29
Помогаю со студенческими работами здесь

Binding
public class ProjectInfo { public List&lt;AHU&gt; ListAHU { get; set; } public string ProjectName { get; set; } ...

Radiobutton binding
Начал изучать WPF и столкнулся со следующей проблемой: как двум радиобаттонам присвоить одно свойство? Т.е. при выборе одного свойство...

Binding в DataTemplate
Проблема в следующем. Допустим у меня есть XAML разметка: &lt;Window x:Class=&quot;ExampleBinding.MainWindow&quot; ...

Не работает Binding
Здравствуйте. Есть XAML разметка &lt;TreeView x:Name=&quot;treeRows&quot; ItemsSource=&quot;{Binding TreeRows}&quot;&gt; ...

Не работает Binding
Имеется ряд кнопок с привязкой: xmlns:loc=&quot;clr-namespace:First.ViewModel&quot; &lt;UserControl.Resources&gt; &lt;loc:BoolConverter...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru