Autor Beitrag
arcardia
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: Do 02.10.08 15:15 
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
ausblenden 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
ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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:
  • Nimm eine ganz normale Property und setze den Header im Setter. Wenn du aber unbedingt eine DP brauchst:
  • Benutze DependencyObject.ClearValue, allerdings nicht zu früh (:nut:) .

_________________
>λ=
arcardia Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 3803
Erhaltene Danke: 176

Arch Linux
Python, C, C++ (vim)
BeitragVerfasst: 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.

_________________
>λ=