El siguiente código subyacente obras vinculante para el control de usuario SmartFormView:¿Cómo puedo vincular esta Vista a este modelo de vista?
Vista:
<UserControl x:Class="CodeGenerator.Views.PageItemManageSettingsView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:v="clr-namespace:CodeGenerator.Views"
xmlns:vm="clr-namespace:CodeGenerator.ViewModels"
Background="#ddd">
<Grid Margin="10">
<ScrollViewer DockPanel.Dock="Top">
<StackPanel Margin="10">
<v:SmartFormView/>
</StackPanel>
</ScrollViewer>
</Grid>
</UserControl>
de código subyacente:
using System.Windows.Controls;
using CodeGenerator.ViewModels;
namespace CodeGenerator.Views
{
public partial class SmartFormView : UserControl
{
public SmartFormView()
{
InitializeComponent();
DataContext = new SmartFormViewModel("testing");
}
}
}
Sin embargo, quiero obligar a la SmartFormView a su SmartFormViewModel en ViewModel de la vista llamante, no codificado en el código detrás. Sin embargo, estos dos enfoques no se unen:
<UserControl.Resources>
<DataTemplate DataType="{x:Type vm:SmartFormViewModel}">
<v:SmartFormView/>
</DataTemplate>
</UserControl.Resources>
...
<Grid Margin="10">
<ScrollViewer DockPanel.Dock="Top">
<StackPanel Margin="10">
<TextBlock Text="{Binding Testing}"/>
<v:SmartFormView DataContext="{Binding SmartFormViewModel}"/>
<ContentControl Content="{Binding SmartFormViewModel}"/>
</StackPanel>
</ScrollViewer>
</Grid>
En el modelo de vista que tengo "Prueba" y "SmartFormViewModel" define como propiedades ViewModel y llenar los dos (como se muestra a continuación), pero aunque la propiedad de Pruebas une fina, la la SmartFormView no se une a su SmartFormViewModel:
private SmartFormViewModel _smartFormViewModel=;
public SmartFormViewModel SmartFormViewModel
{
get
{
return _smartFormViewModel;
}
set
{
_smartFormViewModel = value;
OnPropertyChanged("SmartFormViewModel");
}
}
private string _testing;
public string Testing
{
get
{
return _testing;
}
set
{
_testing = value;
OnPropertyChanged("Testing");
}
}
public PageItemManageSettingsViewModel(MainViewModel mainViewModel, PageItem pageItem)
: base(mainViewModel, pageItem)
{
SmartFormViewModel SmartFormViewModel = new SmartFormViewModel("manageSettingsMain");
Testing = "test ok";
}
Cuál es la sintaxis para enlazar un control de usuario en XAML a un modelo de vista específico en el llamando al ViewModel de View?
sí, gracias por encontrar eso, agradable de ver, está bien, así que también probé la segunda vía y eso también funciona bien, y eso tiene más sentido para mí, por lo que parece que "define regiones vacías" que luego se rellenan con ViewModels dinámicamente, que automáticamente se unen a sus DataTemplates apropiadas durante la renderización, tienen sentido, son agradables, ¡gracias! –