template data c# wpf data-binding mvvm

c# - data - wpf combobox binding



¿Qué necesito para calificar aún más el DataContext para un enlace? (2)

Los archivos que he creado y a los que me referiré en esta pregunta son:

TechnicainSelectionView.xaml TechnicianSelectionView.cs TechnicianSelectionViewModel.cs Technician.cs (Code First Entity)

Tengo el siguiente xaml en mi TechnicanSelectionView.xaml

<UserControl xmlns etc... here" d:DesignHeight="48" d:DesignWidth="300"> <Grid> <StackPanel> <Label Content="Select a Technican to run the test" FontWeight="Bold"></Label> <ComboBox ItemsSource="{Binding Technicians, Mode=TwoWay}"></ComboBox> </StackPanel> </Grid> </UserControl>

La propiedad Técnicos a la que se establece que ItemSource se enlaza con los estados que no Cannot resolve Technicians due to an unknown DataContext.

Así que si miramos a mi TechnicianSelectionView.cs code-behind ...

public partial class TechnicianSelectionView : UserControl { public TechnicianSelectionViewModel ViewModel { get; private set; } public TechnicianSelectionView() { InitializeComponent(); Technician.GenerateSeedData(); ViewModel = new TechnicianSelectionViewModel(); DataContext = ViewModel; } }

... vemos que estoy configurando el DataContext de la vista para mi TechnicianSelectionViewModel ...

public class TechnicianSelectionViewModel : ViewModelBase { public ObservableCollection<Technician> Technicians { get; set; } public TechnicianSelectionViewModel() { Technicians = new ObservableCollection<Technician>(); } public bool IsLoaded { get; private set; } public void LoadTechnicians() { List<Technician> technicians; using (var db = new TestContext()) { var query = from tech in db.Technicians select tech; foreach (var technician in query) { Technicians.Add(technician); } } IsLoaded = true; } }

Los técnicos es una propiedad en mi ViewModel ...

Por lo tanto, una vez que haya configurado el DataContext para la vista, ¿por qué no puede resolver los Técnicos en el Modelo de Vista como la propiedad / DataContext a la que se enlazará?

EDITAR:

Según una preocupación en un comentario a continuación. Este es un problema de tiempo de diseño y no de compilación. Debería haber indicado esto al comienzo.


Debe especificar el tipo de contexto de datos en xaml para obtener soporte en tiempo de diseño. Aunque haya asignado el contexto de datos en el código subyacente, el diseñador no lo reconocerá.

Intenta poner lo siguiente en tu xaml:

d:DataContext="{d:DesignInstance vm:TechnicianSelectionViewModel}"

Vea este enlace para más detalles.


En mi archivo Xamarin Forms Xaml utilicé las siguientes líneas en el encabezado (etiqueta ContentPage) y funcionó perfectamente como quería.

Basicamente ahora

  • El intellisense muestra los campos en el enlace.
  • mi Resharper puede cambiar el nombre del enlace en el archivo Xaml si refactorizo ​​el nombre de la propiedad

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:vm="clr-namespace:YourApplicationName.ViewModels;assembly=YourApplicationName" mc:Ignorable="d" d:DataContext="{d:DesignInstance {x:Type vm:CurrentPageViewModel}}"