WPF Datenbindung mit Friend Property

16/09/2009 - 10:45 von Jens Duczmal | Report spam
Hallo zusammen,

ich habe ein kleines Problem mit einer Datenbindung vom Entity-Framework an
WPF. Um das Problem mal etwas einzugrenzen, habe ich ein
Mini-Beispielprojekt ganz ohne das EF erstellt. Siehe da, taucht auch hier
auf.

Ich habe z.b. eine Klasse Person mit 2 String-Properties Vorname /
Nachname. Eine List of Person binde ich an eine ComboBox. Làuft.

Setze ich nun aber eine der Properties auf "Friend" zeigt mir die Combobox
nichts mehr an. Quellcode folgt weiter unten.

Kann mir jemand vielleicht zwei Fragen dazu beantworten?

1) Warum ist das so? Friend bezieht sich doch auf meine Assembly. Da das
WPF innerhalb dieser ist, müsste doch auch die Bindung mit Friend laufen.

2) Wie làsst sich das am elegantesten umgehen?

Vielen Dank bereits im voraus.
Mfg,
Jens Duczmal

Quellcode hier:

<Window x:Class="Window1"
xmlns="http://schemas.microsoft.com/winfx/...tion"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<ComboBox ItemsSource="{Binding}" DisplayMemberPath="Vorname"
Margin="73,47,85,0" Name="cboTest" Height="22" VerticalAlignment="Top" />
</Grid>
</Window>

Class Window1
Private Personen As List(Of Person)


Private Sub Window1_Loaded(ByVal sender As Object, ByVal e As
System.Windows.RoutedEventArgs) Handles Me.Loaded

Personen = New List(Of Person)

Personen.Add(New Person() With {.Vorname = "Manfred", .Nachname "Meier"})
Personen.Add(New Person() With {.Vorname = "Oskar", .Nachname "Ottmann"})
Personen.Add(New Person() With {.Vorname = "Rolf", .Nachname "Roller"})

cboTest.DataContext = Personen

End Sub
End Class



Public Class Person
Private _Vorname As String
Private _Nachname As String

Friend Property Vorname() As String
Get
Return _Vorname
End Get
Set(ByVal value As String)
_Vorname = value
End Set
End Property

Public Property Nachname() As String
Get
Return _Nachname
End Get
Set(ByVal value As String)
_Nachname = value
End Set
End Property
End Class
 

Lesen sie die antworten

#1 Elmar Boye
16/09/2009 - 11:38 | Warnen spam
Hallo Jens,

Jens Duczmal schrieb:
ich habe ein kleines Problem mit einer Datenbindung vom Entity-Framework an
WPF. Um das Problem mal etwas einzugrenzen, habe ich ein
Mini-Beispielprojekt ganz ohne das EF erstellt. Siehe da, taucht auch hier
auf.

Ich habe z.b. eine Klasse Person mit 2 String-Properties Vorname /
Nachname. Eine List of Person binde ich an eine ComboBox. Làuft.

Setze ich nun aber eine der Properties auf "Friend" zeigt mir die Combobox
nichts mehr an. Quellcode folgt weiter unten.

Kann mir jemand vielleicht zwei Fragen dazu beantworten?

1) Warum ist das so? Friend bezieht sich doch auf meine Assembly. Da das
WPF innerhalb dieser ist, müsste doch auch die Bindung mit Friend laufen.



WPF arbeitet ausschließlich mit öffentlichen (public) Eigenschaften:
Siehe <URL:http://msdn.microsoft.com/de-de/lib...3.aspx>
"Die als Quelleigenschaften für eine Bindung verwendeten Eigenschaften müssen
öffentliche Eigenschaften der Klasse sein.
Explizit definierte Schnittstelleneigenschaften sowie geschützte, private
und virtuelle Eigenschaften können nicht für eine Bindung herangezogen werden."

Denn Friend (interne) Eigenschaften stellen ggf. ein Sicherheitsrisiko dar.
Da die WPF Bindung sehr viel Reflection nutzt, müsste mit erhöhten Zugriffsrechten
gearbeitet werden, siehe RefectionPermission:
<URL:http://msdn.microsoft.com/de-de/lib...n.aspx>

Was insbesondere bei Inkarnationen wie XBAP und auch Silverlight
unmöglich ist, weil es das Sandbox Prinzip verletzen würde.

2) Wie làsst sich das am elegantesten umgehen?



Gar nicht erst versuchen, verwende Public.

Gruß Elmar

Ähnliche fragen