Was mache ich falsch? Abhängigkeit Eigenschaft innerhalb einer benutzerdefinierten Usercontrol mit DataBinding

(Bearbeitet befestigen Sie die syntax-Fehler des DP - das problem weiterhin besteht wenn)

Ich habe einige Probleme mit Databinding zu einer Abhängigkeitseigenschaft, die im inneren eine einfache benutzerdefinierte usercontrol-und Frage mich, ob einige von Euch Experten kann mir sagen, wohin ich gehe falsch.

Im Grunde, in meinem usercontrol habe ich ein label und zwei buttons. Das label gebunden ist meine Abhängigkeitseigenschaft und wenn Sie auf die Tasten, die Zählung inkrementiert oder dekrementiert, je nachdem auf den button klickt und dann angezeigt wird, indem das Etikett.

Wenn ich dies alles innerhalb einer Seite, ohne ein usercontrol, es ist alles richtig funktioniert. Aber sobald ich mich bewege ihn, um das Benutzersteuerelement es beginnt seltsam handeln. Die anfänglichen Zählung von 0 angezeigt wird, gestartet werden, wie erwartet, und wenn ich auf die Schaltfläche klicke die überarbeitete zählen erscheint auf den ersten Klick. Jedoch wenn ich auf die gleiche Taste erneut, wird die Abhängigkeit Eigenschaft aktualisiert wird, aber der Wert wird nicht angezeigt (die Bezeichnung erlischt). Wenn ich auf die andere Taste, wenn, dann die überarbeitete Zählung angezeigt wird, aber nur für den ersten Klick - das ist alles sehr seltsam, und ich bin stecken!

Wenn ich einen breakpoint auf das 'TheCountProperty_Changed' Methode, die ich überprüfen kann, dass die Eigenschaft Wert wird immer korrekt aktualisiert..

Hier ist der XAML-Code für mein custom control:

<UserControl
x:Class="DPTest.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:DPTest"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400"
x:Name="TestControl"
x:Uid="TestControl">

<Grid>
    <TextBlock x:Name="lblCount" HorizontalAlignment="Left" Margin="0,0,0,0" TextWrapping="Wrap" Text="{Binding Path=TheCount, ElementName=TestControl, Mode=OneWay}" VerticalAlignment="Top" FontSize="36"/>
    <Button x:Name="btnLess" Content="&lt;" HorizontalAlignment="Left" Margin="0,71,0,0" VerticalAlignment="Top" Width="75" Click="btnLess_Click" ClickMode="Press"/>
    <Button x:Name="btnMore" Content="&gt;" HorizontalAlignment="Left" Margin="91,71,0,0" VerticalAlignment="Top" Width="75" Click="btnMore_Click" ClickMode="Press"/>

</Grid>

Und hier ist die CS für Sie:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Windows.Foundation;
using Windows.Foundation.Collections;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Controls.Primitives;
using Windows.UI.Xaml.Data;
using Windows.UI.Xaml.Input;
using Windows.UI.Xaml.Media;
using Windows.UI.Xaml.Navigation;

namespace DPTest
{
public sealed partial class UserControl1 : UserControl
{
    public static readonly DependencyProperty TheCountProperty = DependencyProperty.Register("TheCount", typeof(int), typeof(UserControl1), new PropertyMetadata(0, new PropertyChangedCallback(TheCountProperty_Changed)));

    public int TheCount
    {
        get { return (int)GetValue(TheCountProperty); }
        set { SetValue(TheCountProperty, value); }
    }
    private static void TheCountProperty_Changed(DependencyObject source, DependencyPropertyChangedEventArgs e)
    {

    }

    public UserControl1()
    {
        this.InitializeComponent();
    }

    private void btnLess_Click(object sender, RoutedEventArgs e)
    {
        //lblCount.Text = (Convert.ToInt32(lblCount.Text) - 1).ToString();
        this.TheCount -= 1;
    }

    private void btnMore_Click(object sender, RoutedEventArgs e)
    {
        //lblCount.Text = (Convert.ToInt32(lblCount.Text) + 1).ToString();
        this.TheCount += 1;
    }
}
}

Gehe ich davon aus, dass mein Databinding-syntax ist etwas falsch, aber was sollte es sein?

(EDIT) - The plot thickens! Wollte noch hinzufügen, dass ich habe nur versucht, die genau die gleiche syntax in eine standard-WPF-Anwendung und alles funktioniert wie erwartet. Also ich denke, die Frage ist, habe ich einen bug gefunden mit WinRT/XAML oder ist die syntax anders, die Plattform?

(Edit #2 sorry für die edits, aber ich bin immer noch versucht, diese Arbeit heraus!) Ich fange an zu glauben, dass es ein Anzeigefehler oder bug mit dem button-Steuerelement. Ich habe gerade eine zusätzliche Taste, aber nicht verdrahtet jedem click-Ereignis-code oder irgendetwas - Es ist im Grunde nur eine Taste, die nichts tut. Hier ist die interessante Sache:

  • Wenn ich starten Sie die test-app, klicken Sie auf die btnMore-Taste, dann TheCount bekommen, erhöht, und der Textblock ist wie erwartet aktualisiert. Wenn ich dann auf die gleiche Taste erneut, TheCount wird erhöht, aber der Wert den Text der lblCount wird eine leere Zeichenfolge.
  • Wenn ich jedoch starten Sie die test-app und drücken Sie die btnMore, dann drücken Sie die ungenutzte Taste, und wiederholen Sie,, dann der Wert hält der Inkrementierung und der TextBlock wird laufend aktualisiert - solange ich nicht drücken, btnMore zweimal in einer Zeile, aber drücken Sie die blank-Taste (oder auch einfach konzentrieren Sie den cursor in eine leere Textfeld oder andere UI-Element), dann wird der TextBlock zeigt weiterhin die Inkrementierung der Anzahl. Das zweite ich auf die btnMore mehr als einmal, dann wird der Wert von lblCount wird eine leere Zeichenfolge.

Dies ist sehr seltsam....

Schreibe einen Kommentar