#c# #.net #wpf #vb.net
#c# #.net #wpf #vb.net
Вопрос:
В настоящее время я пишу библиотеку классов, которая будет использоваться моим клиентом. Кроме того, я пишу небольшой wpf-gui для целей тестирования. Этот графический интерфейс должен видеть несколько больше информации, чем клиент. Итак, я объявил несколько свойств как защищенный друг (VB) / защищенный внутренний (C #) и дополнительно установил атрибут InternalsVisibleTo моей библиотеки в свой графический интерфейс.
Хотя доступ к свойствам друга из кода работает хорошо, привязка wpf-database к ним не удалась.
Есть ли какое-либо решение этой проблемы?
Комментарии:
1. Нет, привязка данных работает только с общедоступными свойствами.
2. Не пробовал, но, возможно, вы могли бы объявить внутреннюю статическую ссылку на информационный объект (с общедоступными свойствами), доступ к которому осуществляется через
Source="{x:Static YourClass.Info}"
.3. Вы могли бы перевести данные в viewmodel. В библиотеке классов. Кажется странным, что вы создали библиотеку классов, и данные, которые вы хотите, по крайней мере, отобразить, могут использоваться только в этой библиотеке классов. Вы поместили его в поле, заблокировали поле. Тогда у вас возникнут проблемы с его получением. Возможно, это должны быть просто общедоступные свойства.
Ответ №1:
Привязка данных работает только со public
свойствами.
В вашем случае вы можете использовать public
свойство, protected internal set
подобное этому:
public string MyProperty { get; protected internal set; }
Это гарантирует, что свойство может быть прочитано кем угодно, но не может быть изменено извне класса / подкласса и сборки.
Другой альтернативой этому является предоставление отдельного общедоступного свойства, доступного только для получения, которое принимает значение из вашего защищенного внутреннего свойства следующим образом:
public string MyProperty => MyProtectedInternalProperty;
Комментарии:
1. Сначала я попробовал второй вариант с дополнительным свойством, который у меня не сработал, потому что MyProtectedInternalProperty также является связанным свойством и не устанавливается во время вызова свойства. Итак, я выбрал другое решение с разными модификаторами доступа для get и set, что для меня нормально
Ответ №2:
Привязка от модели к представлению не является правильным способом. Я рекомендую создать ViewModel для привязки из ViewModel к View. Модель — это просто модель