Laden...

Binding an Dependency Property von UserControl

Erstellt von MillionsterNutzer vor 9 Jahren Letzter Beitrag vor 9 Jahren 728 Views
M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 9 Jahren
Binding an Dependency Property von UserControl

Hallo zusammen,

ich habe gerade ein UserControl erstellt welches es erlauben soll einen bestimmten Objekttyp anzuzeigen und zu editieren. Momentan sind das testhalber nur einige TextBoxen welche eben bestimmte Properties des zugewiesenen Objekts anzeigen.
Nun habe ich dem UserControl ein DependencyProperty ReadOnly hinzugefügt welches ich neben dem anzuzeigenden Objekt setzen will. Das funktioniert soweit auch, allerdings frage ich mich nun wie ich das ReadOnly meines UserControls an die ReadOnly Properties der enthaltenen Textboxen weiterleiten kann.

Kann mich da jemand bitte eben in die richtige Richtung leiten? Irgendwie habe ich beim googlen bei diesem Thema kein Glück (bzw. die falschen Suchbegriffe).

VG

Ralf

R
212 Beiträge seit 2012
vor 9 Jahren

Entweder machst dus im XML
dh du gehst in dein UControl und schreibst oben in die UControl definition hier->

<UserControl ReadOnly={Binding ReadOnly} >...</UserControl>

Wenn du ein ViewModel hast kannst du über den Ancestor auf das Usercontrol binden
Hier bin ich mir nicht sicher ob da ein namenskonflikt bei gleicher benennung entsteht zwischen dem MISL code und deinem c# Code

<UserControl
ReadOnly="{RelativeSource AncestorType={x:Type UserControl} Path=ReadOnly}">...</UserControl>

Oder du machst es im code

 
        public Boolean ReadOnly
        {
            get { return (Boolean)GetValue(ReadOnlyProperty); }
            set { SetValue(ReadOnlyProperty, value); }
        }

        public static readonly DependencyProperty ReadOnlyProperty =
            DependencyProperty.Register("ReadOnly", typeof(Boolean), typeof(MyUserControl), new PropertyMetadata(default(Boolean), OnReadOnlyChanged));

        private static void OnReadOnlyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
        {
            ((MyUserControl)o).OnReadOnlyChanged((Boolean)e.OldValue, (Boolean)e.NewValue);
        }

        private void OnReadOnlyChanged(Boolean oldValue, Boolean newValue)
        {
this.Readonly = newValue;
        }

M
MillionsterNutzer Themenstarter:in
235 Beiträge seit 2005
vor 9 Jahren

Hi Robin0,

habs mit deinem Hinweis hinbekommen:

IsReadOnly="{Binding Path=ReadOnly, RelativeSource={RelativeSource AncestorType={x:Type UserControl}}}"

Vielen Dank für die Hilfe!!!

Ralf