Подтвердить что ты не робот

Что мне нужно для дальнейшего определения DataContext для привязки?

Файлы, которые я создал и на которые будет ссылаться в этом вопросе, следующие:

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

У меня есть следующий xaml в моем 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>

Свойство Technicians, для которого ItemSource установлено для привязки к состояниям, что он Cannot resolve Technicians due to an unknown DataContext.

Итак, если мы посмотрим на мой код TechnicianSelectionView.cs...

public partial class TechnicianSelectionView : UserControl
{
    public TechnicianSelectionViewModel ViewModel { get; private set; }

    public TechnicianSelectionView()
    {
        InitializeComponent();

        Technician.GenerateSeedData();

        ViewModel = new TechnicianSelectionViewModel();
        DataContext = ViewModel;
    }
}

... мы видим, что я устанавливаю представление DataContext в свой 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;
    }
}

Техники - это свойство на моем ViewModel...

Итак, если установить DataContext для представления, почему он не может разрешить техников в ViewModel в качестве свойства DataContext/, которое он будет связывать с?

EDIT:

В соответствии с примечанием в комментарии ниже. Это проблема времени проектирования, а не время компиляции. Я должен был указать это в начале.

4b9b3361

Ответ 1

Вам нужно указать тип контекста данных в xaml для получения поддержки времени разработки. Несмотря на то, что вы назначили контекст данных в коде, разработчик не узнает об этом.

Попробуйте добавить в xaml следующее:

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

Подробнее см. эту ссылку.

Ответ 2

В моем файле Xamarin Forms Xaml я использовал следующие строки в заголовке (тег ContentPage), и он работал отлично, как я хотел.

В настоящее время

  • intellisense показывает поля в привязке
  • мой Resharper может переименовать привязку в файле Xaml, если я реорганизую имя свойства

    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}}"