wpf - gratis - ¿Cómo enlazar el tipo de datos DataTemplate a la interfaz?
observablecollection c# ejemplo (1)
Puede enlazar a las interfaces diciéndole a wpf explícitamente que está enlazando a un campo de interfaz:
(Tenga en cuenta que ViewModelBase es simplemente una clase base que implementa la interfaz INotifyPropertyChanged)
public class Implementation : ViewModelBase, IInterface
{
private string textField;
public string TextField
{
get
{
return textField;
}
set
{
if (value == textField) return;
textField = value;
OnPropertyChanged();
}
}
}
public interface IInterface
{
string TextField { get; set; }
}
Luego en el ViewModel:
private IInterface interfaceContent;
public IInterface InterfaceContent
{
get { return interfaceContent; }
}
Y finalmente el Xaml que lo hace posible.
<ContentControl Grid.Row="1" Grid.Column="0" Content="{Binding InterfaceContent}">
<ContentControl.ContentTemplate>
<DataTemplate DataType="{x:Type viewModels:IInterface}">
<TextBox Text="{Binding Path=(viewModels:IInterface.TextField)}"/>
</DataTemplate>
</ContentControl.ContentTemplate>
</ContentControl>
Como puede ver, el enlace se refiere explícitamente a la definición de ''Interfaz''.
Estoy escribiendo una aplicación MVVM WPF acoplada de forma flexible y las VM secundarias en una VM principal son interfaces en lugar de instancias de clase, por ejemplo
public IChildViewModel { get; set; }
Ahora, ¿cómo puedo representar esta propiedad utilizando una DataTemplate? me gusta:
<DataTemplate DataType="{x:Type contracts:IChildViewModel}">
Entiendo que debido a la naturaleza de las interfaces (herencia múltiple, etc.) WPF no permite esta vinculación directa. Pero como las interfaces deben utilizarse ampliamente en aplicaciones de acoplamiento flexible, ¿hay alguna solución para vincular DataTemplate a las interfaces? Gracias.