2012-08-17 11 views
9

Ich habe eine Usercontrol mit einem Viewmodel-Klasse als Datacontext:interne Bindung Ansichtsmodell-Liegenschaften

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();   
     } 
    } 
} 

Ansichtsmodell Klasse:

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

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

Wenn ich den ViewMod einstelle elProperty für die Öffentlichkeit funktioniert die Bindung gut. Aber wenn ich die Eigenschaft wie oben auf intern festlegen, schlägt die Bindung fehl (Binding error: Eigenschaft nicht gefunden ...).

Ich dachte, eine interne Eigenschaft ist wie public in derselben Baugruppe zugänglich. Ich kann auch ohne Probleme von Usercontrol-Code-Behind auf die Eigenschaft zuzugreifen:

{ 
... 

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

... 

Alle explenation für dieses Verhalten?

Vielen Dank im Voraus, rhe1980

+0

Sie, bevor Sie einen Blick auf Databinding-docs genommen haben sollte. – HichemSeeSharp

Antwort

19

Wie bereits erwähnt 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

danke für deine antwort! Ich dachte im Hinblick auf die Eigenschaft ist das gleiche, wenn die Klasse öffentlich ist und das Eigentum ist intern wie wenn die Klasse intern und das Eigentum öffentlich ist. Aber Link scheint nicht: -) ... – rhe1980