2012-08-17 17 views
9

que tienen un control de usuario con una clase ViewModel como DataContext:La unión al interior modelo de vista-propiedad

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> 

CodeBehind:

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

modelo de vista de clase:

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

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

Si configuro ViewMod elProperty to public the binding funciona bien. Pero si configuro la propiedad en interno como arriba, el enlace falla (error de enlace: propiedad no encontrada ...).

Pensé que una propiedad interna es accesible como pública en el mismo ensamblado. También puedo acceder a la propiedad de UserControl-código subyacente sin ningún problema:

{ 
... 

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

... 

Cualquier explicación necesaria para este comportamiento?

Gracias de antemano, rhe1980

+0

Debería haber tomado una mirada en documentos DataBinding antes. – HichemSeeSharp

Respuesta

19

Como se dijo here

The properties you use as binding source properties for a binding must be public properties of your class. Explicitly defined interface properties cannot be accessed for binding purposes, nor can protected, private, internal, or virtual properties that have no base implementation.

+0

gracias por su respuesta! Pensé que desde el punto de vista de la propiedad es lo mismo si la clase es pública y la propiedad es interna como cuando la clase es interna y la propiedad pública. Pero parece que el enlace no: -) ... – rhe1980

Cuestiones relacionadas