Привязка к внутреннему ViewModel-Property

У меня есть UserControl с классом ViewModel как DataContext:

XAML

<UserControl x:Class="DotfuscatorTest.UserControl.View.UserControlView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" >    
<StackPanel>
  <TextBox Text="{Binding ViewModelProperty}"/>
</StackPanel>
</UserControl>

Код позади:

namespace DotfuscatorTest.UserControl.View
{
   using ViewModel;
   public partial class UserControlView
   {
      public UserControlView()
      {
         InitializeComponent();
         DataContext = new UserControlViewModel();         
      }
   }
}

ViewModel класс:

namespace DotfuscatorTest.UserControl.ViewModel
{
   public class UserControlViewModel
   {
      private string viewModelProperty = "hello world";

      internal string ViewModelProperty
      {
        get { return viewModelProperty; }
        set { viewModelProperty = value; }
      }
   }
}

Если я установил ViewModelProperty как общедоступный, привязка будет работать нормально. Но если я установил для свойства значение internal, как указано выше, привязка не удалась (ошибка привязки: свойство не найдено ...).

Я думал, что внутреннее свойство доступно как общедоступное в той же сборке. Также я могу без проблем получить доступ к свойству из UserControl-codebehind:

{
...

((UserControlViewModel)DataContext).ViewModelProperty = "hallo viewmodel";

...

Любое объяснение такого поведения?

Заранее спасибо, rhe1980


person rhe1980    schedule 17.08.2012    source источник
comment
Вы должны были взглянуть на документацию DataBinding раньше.   -  person HichemSeeSharp    schedule 17.08.2012


Ответы (1)


Как указано здесь

Свойства, которые вы используете в качестве свойств источника привязки для привязки, должны быть общедоступными свойствами вашего класса. Явно определенные свойства интерфейса недоступны для целей привязки, а также недоступны защищенные, частные, внутренние или виртуальные свойства, не имеющие базовой реализации.

person JleruOHeP    schedule 17.08.2012
comment
спасибо за Ваш ответ! Я думал, что с точки зрения свойства это то же самое, если класс является общедоступным, а свойство является внутренним, например, когда класс является внутренним, а свойство - общедоступным. Но вроде ссылки нет: -) ... - person rhe1980; 17.08.2012