2012-01-17 22 views
10

Estoy tratando de portar un C--WPF-Project existente como una aplicación de iPad.Reutilizar C# -Project en el iPad

Por lo que descubrí hasta ahora, la mejor manera de hacerlo sería usar MonoTouch y reutilizar tanto C# -Logic como sea posible.

Como el proyecto original está escrito con WPF para un TabletPC real, mi pregunta es si hay alguna forma de reutilizar las fuentes WPF o al menos minimizar la parte que tengo que volver a escribir.

Si hay buenas alternativas a MonoTouch, le agradecería consejos también :)

ACTUALIZACIÓN: Sus comentarios fueron útiles, pero no son 100% de lo que estaba buscando. MonoCross se ve bien, pero por lo que yo entiendo, simplemente "oculta" la parte específica de iOS. Lo que realmente me encantaría sería una forma de reutilizar los Controles WPF "especiales" escritos a mano. (O al menos minimice el trabajo/tiempo para transferirlos). Esto sería increíble.

ACTUALIZACIÓN 2: Tal vez debería añadir que también aceptaría una técnica de tres pasos "complicada". Por ejemplo, ¿hay alguna manera de traducir los archivos XAML-WPF a HTML5 (o algo igualmente poderoso) y luego usar Titanium o PhoneGap? Los lenguajes y marcos no deberían ser el gran problema, solo trato de encontrar la manera de reutilizar tanto como sea posible :)

+0

¿Existe alguna clase de capa de servicio web utilizada en la aplicación WCF original? – fuzz

+0

No, no hay capa de servicios web en la aplicación WPF original. – basti

+0

Consulte esta pregunta relacionada: http://stackoverflow.com/questions/8755801/anyone-have-experience-with-architecture-for-cross-platform-wp7-android-ios-mobi/8756281#8756281 – ColinE

Respuesta

3

Consulte this previous question que está relacionado y puede ser de interés en la creación de iOS multiplataforma, Android y aplicaciones WP7.

En respuesta a su pregunta, no es posible reutilizar WPF Guis en iPad, iPhone, Android. Solo Windows Phone admitirá vistas Silverlight. Para solucionarlo, debe utilizar una arquitectura de controlador Model View (ya que iOS, Android no admitirá el enlace de datos a través de MVVM) en los tres y crear vistas separadas para cada arquitectura.

Si bien esto puede sonar laborioso, tenga en cuenta que si realiza una arquitectura correcta de su aplicación para que la lógica comercial y la lógica de presentación estén dentro de las capas del Controlador (o servicios), puede reutilizar una gran proporción de su código. Esta es la misma limitación que si creara código multiplataforma para implementación dual en Silverlight y WPF en Windows. Los archivos Xaml a menudo tienen que ser específicos para cada marco, sin embargo a menudo se pueden compartir * .cs controles de usuario y viewmodels/código lógico.


ACTUALIZACIÓN: A raíz de su actualización (2) en cuestión.

Sí, puede usar un servidor de terceros para traducir archivos XAML-WPF a HTML5: el ComponentArt Dashboard Server. Esto pretende traducir las aplicaciones WPF/Silverlight escritas usando MVVM estricto a HTML5/JS para la portabilidad en múltiples dispositivos. No puedo garantizar la efectividad de esto y sé que es costoso, sin embargo, si está realmente atascado y quiere usar WPF -> HTML5, vale la pena investigar esto.

Saludos cordiales,

+0

Es una pena, porque el proyecto existente está escrito para un TabletPC táctil. La arquitectura debería estar bien ya. Entonces, la parte "grande" era/es la interfaz del usuario. – basti

+1

@Chiffre sí, gran vergüenza. Sin embargo, eso es lo que ocurre con las API específicas de la plataforma: Apple/Google no tiene ningún incentivo para admitir WPF. ¡Solo por la astuta piratería del equipo Monotouch/Monodroid es que incluso podemos usar C# en estas plataformas! Si encuentra alguna forma de compartir más código GUI, hágamelo saber. Es un área que me interesa mucho. Saludos cordiales, –

+0

Por lo que puedo ver, el "Servidor de tablero de ComponentArt" solo funciona para los controles, que están incluidos en el "Marco". Lo habría necesitado para mis propios controles creados. ¡Sin embargo, aceptaré que tengo que reescribirlo y usted fue muy útil! – basti