Привязка данных Wpf к свойству друга

#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. Модель — это просто модель