Entwickler-Ecke

WPF / Silverlight - Binding für MenuItems Header Text


arcardia - Do 02.10.08 15:15
Titel: Binding für MenuItems Header Text
Hi

Hab ein kleines Binding Problem in meinem UserControl
dieses enthält ein ContextMenu dessen Header Text ich als Depency Property nach aussen führen wollte
um diesen von extern ändern zu können

Leider funzt das Binding nicht mit dem MenuItem , wohl aber mit einer Textbox untendrunter.
Meine nächste Vermutung war es das der Header vom Typ Object ist und dieser mit einem String Property
nichts anfangen kann aber auch eine TextBox innerhalb des MenuItems brachte keinen Erfolg

Hier mal der XAML Code vom UserControl

XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
<UserControl x:Class="BindingTest.myControl"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Name="meincontrol"
    Height="300" Width="300">
    <Grid Background="Red">
        
        <Grid.ContextMenu>
            <ContextMenu>
                
                <!-- DAS BINDING HIER FUNZT LEIDER NICHT -->
                <MenuItem  Header="{Binding ElementName=meincontrol, Path=MeinText}"/>
            </ContextMenu>
        </Grid.ContextMenu>
        
        
        <!-- DAS BINDING HIER GEHT PERFEKT -->
        <TextBlock Text="{Binding ElementName=meincontrol, Path=MeinText}"/>
        
    </Grid>
</UserControl>


Und hier mal das Property C# Code

C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
        /// <summary>
        /// Eigenschaft MeinText
        /// </summary>
        public static readonly DependencyProperty MeinTextProperty =
            DependencyProperty.Register("MeinText"typeof(string), typeof(myControl),
            new FrameworkPropertyMetadata("Hello World"));
        [TypeConverter(typeof(StringConverter))]
        public string MeinText {
            get {
                return (string)base.GetValue(MeinTextProperty);
            }
            set {
                base.SetValue(MeinTextProperty, value);
            }
        }


Jemand ne Idee was im Binding oben geändert werden muss ?
Hab da derzeit nicht wirklich nen Plan von ;)

Moderiert von user profile iconChristian S.: Code- durch Xml- und C#-Tags ersetzt


Kha - Do 02.10.08 22:51

Sieht dummerweise so aus, als ob der Header explizit auf null gesetzt würde, wenn man ihm nichts zuweist. Dieser Wert hat damit Vorrang vor Bindings, ergo lässt sich HeaderProperty anscheinend überhaupt nicht binden. Zwei Möglichkeiten, die mir gerade einfallen:


arcardia - Sa 04.10.08 13:09

Nunja eine Depency Property mit Callback in dem ich den Header per Hand setze währe ne Art Work-Around.

Ich vermute mal eher es fehlt im Binding noch irgendnen Flag oder eine Source Angabe. (Nur welches..?)
Während der Ausführung steht unten in der Ausgabe Error in Binding: 4 Source not found...


Kha - Sa 04.10.08 16:02

user profile iconarcardia hat folgendes geschrieben Zum zitierten Posting springen:
Ich vermute mal eher[...]
Das war keine Vermutung von mir ;) . In HeaderedItemsControl.PrepareHeaderedItemsControl steht (warum auch immer) ein this.Header = null;, danach hast mit Data Binding du keine Chance mehr.