| 

.NET C# Java Javascript Exception

2
Ich versuche eine Eigenschaft eines WPF-UserControls sichtbar zu machen. Leider funktioniert das nicht.

Hier der Code - vielleicht kann mir jemand sagen, warum diese Eigenschaft nicht verfügbar ist (weder im Designer, wenn ich das Steuerelement benutze noch über das Setzen von Bindings)

Imports System.Windows
Imports System.Windows.Controls
Imports System.Collections

Public Class AllocatingListBoxes
Inherits DependencyObject

Private Shared ReadOnly ReferenceItemsProperty As DependencyProperty =
DependencyProperty.RegisterAttached("ReferenceItems", GetType(IEnumerable), GetType(AllocatingListBoxes))

Public Property ReferenceItems() As IEnumerable
Get
Return DirectCast(GetValue(ReferenceItemsProperty), IEnumerable)
End Get
Set(value As IEnumerable)
SetValue(ReferenceItemsProperty, value)
End Set
End Property

End Class
08.05.2013
MyKey0815 1,6k 2 9
5 Antworten
3
Du registrierst Deine Dependency Property als AttachedProperty.

Private Shared ReadOnly ReferenceItemsProperty As DependencyProperty =
DependencyProperty.RegisterAttached("ReferenceItems", GetType(IEnumerable), GetType(AllocatingListBoxes))

Ich denke, dass ist nicht das, was Du möchtest. Verwende statt RegisterAttached die Methode Register, um Deine Dependency Property zu registrieren. Dann sollte das klappen.

EDIT: Nach genauerem Hinschauen fällt mir noch folgendes auf:

Du hast die Dep.Property Private deklariert. Da kann WPF die Property nicht finden. Mach sie Public.
Ich verwende (in C#, gibts in VB vlt. auch) immer das Snippet propdp zum Erzeugen einer Dependency Property und passe nur die Teile an, die relevant sind.
08.05.2013
ffordermaier 8,4k 3 9
2
Vielleicht nur eine Teilantwort: die Typinformation "IEnumerable" dürfte für den Designer nicht ausreichend sein. Der wird wissen wollen, was in der Property drin steckt, und vor allem, was er selber hineintun kann - sowohl welche Implementierung von IEnumerable er verwenden soll, als auch welchen Typ die einzelnen Elemente haben sollen. Designer-Unterstützung, um beliebige Aufzählungen beliebiger Objekte zu erzeugen, gibt es meines Wissens nicht.
08.05.2013
Matthias Hlawatsch 13,2k 4 9
0
Ich habe die beiden Antworten kombiniert - leider immer noch ohne Erfolg

Hier der aktuelle Code:

Private Shared ReadOnly ReferenceItemsProperty As DependencyProperty =
DependencyProperty.Register("ReferenceItems", GetType(List(Of Object)), GetType(AllocatingListBoxes))

Public Property ReferenceItems As List(Of Object)
Get
Return DirectCast(GetValue(ReferenceItemsProperty), List(Of Object))
End Get
Set(value As List(Of Object))
SetValue(ReferenceItemsProperty, value)
End Set
End Property


Kann es sein, dass bei der Verwendung in meiner View noch was nicht stimmt?

<Grid>
<my:AllocatingListBoxes Margin="6" x:Name="albUsersToUserGroups" ReferenceItems="{Binding Users}"/>
</Grid>
08.05.2013
MyKey0815 1,6k 2 9
Ich erhalte den Fehler:
"Der AllocatingListBoxes-Typ enthält keine ReferenceItems-Eigenschaft."
MyKey0815 08.05.2013
1
Hab meine Antwort editiert. Hiflt Dir das weiter?
ffordermaier 08.05.2013
0
Ich wage mal einen Schuss ins Blaue und vermute, dass du in der View eigentlich ReferensItems gemeint hast.
08.05.2013
jsc 289 1 7
Ja ;-)

Aber leider ändert auch die richtige Schreibweise nichts daran. Außerdem wird in der Autovervollständigungsliste von VS2010 die Eigenschaft gar nicht angezeigt
MyKey0815 08.05.2013
0
Eigentlich ein triviales Problem ;-)

Die WPF-Engine benutzt nicht dein public CLR-Property "ReferenceItems" sondern benutzt intern immer das DependencyProperty "ReferenceItemsProperty", da das bei dir aber "private" ist, kann die WPF-Engine das nicht finden. Ergo... mache dein DependencyProperty "public static" und schon wird es gehen. Ah ja, noch was... wenn du schon im XAML einen Typ "User" übergibst, dann sollte deine Auflistung den gleichen Typ enthalten:
DependencyProperty.Register
(
"ReferenceItems",
GetType(List(Of User)),
GetType(AllocatingListBoxes)
)

und wenn du Änderungen (Add,Remove) an deiner Auflistung mitbekommen möchtest, wäre eine ObservableCollection oder eine ICollectionView eh die besser Wahl.

Gruß Carl
10.05.2013

Stelle deine .net-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH