2013-07-04 9 views
5

Ich portiere eine vorhandene WPF-Anwendung auf eine Windows 8-Anwendung. In der WPF-Anwendung verwenden wir in großem Umfang MultiValue-Konverter, um Werte zu erzeugen, die Kombinationen aus UI-Elementeigenschaften und Viewmodel-Eigenschaften sind (das Gewicht eines Nilpferd-Objekts und die tatsächliche Breite eines Gegenstands), um schöne UI-Effekte zu erzielen .Was verwenden Benutzer anstelle von IMultiValueConverters in Windows 8?

Windows 8 verfügt jedoch nicht über einen MultiValue-Konverter.

Da ich eine Anwendung portiere, möchte ich nicht wirklich meine Viewmodels oder Xaml ändern.

Wie kann ich Multivalue-Controller-Funktionalität mit einem Minimum an Schmerzen und Neuschreiben replizieren?

+4

'Ich portiere eine vorhandene WPF-Anwendung auf eine Windows 8-Anwendung. - Ich bedauere Sie sehr. Ab sofort ist der WinRT XAML-Funktionsumfang dem von Silverlight sogar unterlegen. Das bedeutet, dass es nur ein kleiner Bruchteil des vollständigen WPF-Features ist. Dies bedeutet, dass Sie auf alle Arten von schrecklichen Hacks zurückgreifen müssen, um dies zum Funktionieren zu bringen. –

+4

WinRT ist das neue CompactFramework, es hat alles außer ........ alles –

+4

Ich benutze stattdessen Schimpfwörter. Viele von ihnen :-) – dotMorten

Antwort

0

Mein Ansatz bestand darin, eine statische Singleton-Instanz der VM verfügbar zu machen; zum Beispiel:

public class MainViewModel : INotifyPropertyChanged 
{ 
    private static MainViewModel _mvm; 
    public static MainViewModel MVM 
    { 
     get 
     { 
      if (_mvm == null) 
       _mvm = new MainViewModel(); 

      return _mvm; 
     } 
    } 

Dann einfachen Pass der gesamte VM durch:

<Button Command="{Binding MyCommand}" CommandParameter="{Binding MVM}">Run Command</Button>   

ist mehrbindigen es nicht, aber es ermöglicht es Ihnen, mehrere Parameter zu übergeben.

+0

Das Problem besteht nicht darin, wie ein Viewmodel an einen Konverter übergeben wird. Es gibt Ansichtsmodel- UND Ansichtseigenschaften an den Konverter weiter. (Oh, und Sie scheinen überhaupt keinen Konverter zu verwenden, was verwirrend ist, da es sich um Konverter handelt). –

+0

Die Antwort ist, dass WinRT es nicht unterstützt. Ich dachte nur, ich würde einen alternativen Ansatz anbieten. –

Verwandte Themen