Aktuelles Datum in Silverlight XAML TextBlock

8

Ich komme von Flex, wo Sie fast alles in geschweiften Klammern tun können. Ich versuche, ein TextBlock zu erhalten, um das heutige Datum und die heutige Zeit anzuzeigen, ohne es nur in C # zu codieren. Ich habe viele verschiedene Varianten der folgenden ohne Glück versucht.

%Vor%

Ich weiß, ich könnte wahrscheinlich einfach eine Eigenschaft MyDate setzen und an diese binden, aber warum kann ich nicht direkt an die Eigenschaft DateTime.Now binden?

    
Tony Smith 12.03.2010, 05:22
quelle

3 Antworten

14

Die Bindung in Silverlight erfordert ein Source-Objekt oder ein Dependency-Objekt. Von diesem Quellobjekt können Sie an Eigenschaften binden (daher sind Sie per Definition an Instanzelemente gebunden) oder an Abhängigkeitseigenschaften.

Da DateTime.Now eine statische Eigenschaft ist, die Sie nicht direkt an Silverlight binden können, ist Code erforderlich. Die nächste beste Sache ist es, Code zu verwenden: -

  • stellen Sie sicher, dass so viel von dem, was Sie brauchen, in XAML
  • ausgedrückt werden kann
  • dies möglichst entkoppelt zu tun.

Daher können wir analysieren, dass wir zwei Dinge brauchen.

  1. Zeigen Sie die statischen Member von DateTime als Instanzeigenschaften eines Objekts an
  2. Sie haben die Möglichkeit, DateTime auf eine gewünschte Ausgabe zu formatieren.

Um das erste Element zu behandeln, würde ich eine Klasse StaticSurrogate erstellen, wo ich Instanzeigenschaften für die statischen Eigenschaften erstellen würde, auf die wir zugreifen müssen: -

%Vor%

Jetzt brauchen wir eine Möglichkeit, eine Date-Zeit zu formatieren. Ein Wertkonverter ist das richtige Werkzeug für diesen Job und entlehnt stark von diesem Tim Heuer Blog : -

%Vor%

Mit diesen beiden Klassen können wir nun den Rest in Xaml erledigen. Zuerst brauchen wir Instanzen dieser Klassen in unseren Ressourcen: -

%Vor%

Jetzt können wir die TextBlock : -

verdrahten %Vor%

Beachten Sie, dass dieser Ansatz folgende Vorteile bietet: -

  • wir müssen dem UserControl, auf dem der TextBlock liegt, keinen Code hinzufügen, und wir müssen auch nicht mit irgendeinem Datenkontext herumspielen.
  • Die statischen Ressourcen könnten in den App.Resources platziert werden, wodurch die Erstellung des TextBlocks völlig unabhängig davon wäre, dem UserControl etwas anderes hinzuzufügen.
  • Die zur Anzeige des Datums verwendete Formatierung kann unabhängig geändert werden.
  • Der Zugriff auf zusätzliche statische Eigenschaften kann problemlos zur Klasse StaticSurrogate hinzugefügt werden.
AnthonyWJones 12.03.2010, 09:46
quelle
7

Selbst wenn Sie DateTime.Now in Silverlights XAML deklarieren könnten (da Sie in WPF - Ссылка ), Sie haben das Problem, dass Ihre Zeit nicht aktualisiert wird. Wenn Sie einen lokalen Timer verwenden, der sich in der Sekunde aktualisiert, können Sie sicherstellen, dass Ihre Zeit ebenfalls aktualisiert wird.

%Vor%

Deklarieren Sie eine Instanz in xaml ala:

%Vor%

und verwenden Sie die Bindung, um sicherzustellen, dass Ihre Zeit immer reflektiert wird.

%Vor%     
nyxtom 12.03.2010 11:10
quelle
1
___ qstnhdr ___ Aktuelles Datum in Silverlight XAML TextBlock ___ tag123silverlight ___ Silverlight ist Cross-Browser plattformübergreifendes Plug-In von Microsoft für Medienerlebnisse und umfangreiche interaktive Anwendungen. ___ answer2431741 ___

Die Bindung in Silverlight erfordert ein Source-Objekt oder ein Dependency-Objekt. Von diesem Quellobjekt können Sie an Eigenschaften binden (daher sind Sie per Definition an Instanzelemente gebunden) oder an Abhängigkeitseigenschaften.

Da %code% eine statische Eigenschaft ist, die Sie nicht direkt an Silverlight binden können, ist Code erforderlich. Die nächste beste Sache ist es, Code zu verwenden: -

  • stellen Sie sicher, dass so viel von dem, was Sie brauchen, in XAML
  • ausgedrückt werden kann
  • dies möglichst entkoppelt zu tun.

Daher können wir analysieren, dass wir zwei Dinge brauchen.

  1. Zeigen Sie die statischen Member von DateTime als Instanzeigenschaften eines Objekts an
  2. Sie haben die Möglichkeit, DateTime auf eine gewünschte Ausgabe zu formatieren.

Um das erste Element zu behandeln, würde ich eine Klasse %code% erstellen, wo ich Instanzeigenschaften für die statischen Eigenschaften erstellen würde, auf die wir zugreifen müssen: -

%Vor%

Jetzt brauchen wir eine Möglichkeit, eine Date-Zeit zu formatieren. Ein Wertkonverter ist das richtige Werkzeug für diesen Job und entlehnt stark von diesem Tim Heuer Blog : -

%Vor%

Mit diesen beiden Klassen können wir nun den Rest in Xaml erledigen. Zuerst brauchen wir Instanzen dieser Klassen in unseren Ressourcen: -

%Vor%

Jetzt können wir die %code% : -

verdrahten %Vor%

Beachten Sie, dass dieser Ansatz folgende Vorteile bietet: -

  • wir müssen dem UserControl, auf dem der TextBlock liegt, keinen Code hinzufügen, und wir müssen auch nicht mit irgendeinem Datenkontext herumspielen.
  • Die statischen Ressourcen könnten in den App.Resources platziert werden, wodurch die Erstellung des TextBlocks völlig unabhängig davon wäre, dem UserControl etwas anderes hinzuzufügen.
  • Die zur Anzeige des Datums verwendete Formatierung kann unabhängig geändert werden.
  • Der Zugriff auf zusätzliche statische Eigenschaften kann problemlos zur Klasse %code% hinzugefügt werden.
___ tag123date ___ Ein Datum ist ein mehrdeutiges Zeitintervall, das sich normalerweise auf einen Tag, einen Monat und ein Jahr bezieht. ___ tag123xaml ___ Die Extensible Application Markup Language (XAML) ist eine deklarative XML-basierte Sprache, die zum Initialisieren strukturierter Werte und Objekte in verschiedenen Frameworks verwendet wird. Wenn eine Frage über die Verwendung von XAML mit einem bestimmten Framework ist, sollte auch ein Tag für das Framework bereitgestellt werden, z. [wpf] (Windows Presentation Foundation), [Silverlight], [Windows-Phone], [Windows-Store-Apps] (Windows 8 Store-Apps), [win-universal-app], [xamarin.forms] oder [workflow- Stiftung] ___ tag123binding ___ Dieses Tag bedeutet verschiedene Dinge in verschiedenen Kontexten; Erwägen Sie, stattdessen oder zusätzlich zweideutige Tags zu verwenden. Häufige Bedeutungen sind: Dependency-Injection und Datenbindung an Objekte und Bindungen zwischen Komponenten einer Anwendung. ___ tag123textblock ___ TextBlock ist ein UI-Steuerelement zum Anzeigen kleiner Textmengen in WPF (.NET Framework). ___ qstntxt ___

Ich komme von Flex, wo Sie fast alles in geschweiften Klammern tun können. Ich versuche, ein %code% zu erhalten, um das heutige Datum und die heutige Zeit anzuzeigen, ohne es nur in C # zu codieren. Ich habe viele verschiedene Varianten der folgenden ohne Glück versucht.

%Vor%

Ich weiß, ich könnte wahrscheinlich einfach eine Eigenschaft %code% setzen und an diese binden, aber warum kann ich nicht direkt an die Eigenschaft %code% binden?

    
___ answer2432254 ___

Selbst wenn Sie DateTime.Now in Silverlights XAML deklarieren könnten (da Sie in WPF - Ссылка ), Sie haben das Problem, dass Ihre Zeit nicht aktualisiert wird. Wenn Sie einen lokalen Timer verwenden, der sich in der Sekunde aktualisiert, können Sie sicherstellen, dass Ihre Zeit ebenfalls aktualisiert wird.

%Vor%

Deklarieren Sie eine Instanz in xaml ala:

%Vor%

und verwenden Sie die Bindung, um sicherzustellen, dass Ihre Zeit immer reflektiert wird.

%Vor%     
___
knockando 09.03.2011 17:37
quelle