我需要做什么,以进一步限定的DataContext的约束力?(What do I need to f

2019-07-20 14:19发布

我已经创建,将参照此问题的文件是:

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

我在我的TechnicanSelectionView.xaml下面的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>

技术员到的属性的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;
    }
}

Techicians是我的ViewModel属性...

所以在已经设置的DataContext的观点,为什么不能解析的视图模型作为技术人员在DataContext /属性它要结合?

编辑:

按下面的评论的关注。 这是设计的时间问题,而不是编译时间。 我应该在一开始已经表明这一点。

Answer 1:

您需要指定在XAML数据上下文的类型来获得设计时支持。 即使你在指定的数据上下文代码隐藏,设计师是不会承认这一点。

尝试把下面的XAML中:

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

请参阅此链接了解更多详情。



Answer 2:

在我Xamarin窗体XAML文件我用下面的行头(ContentPage标签)和它的工作完全是我想要的。

现在基本上

  • 智能感知示出了在结合的字段
  • 我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}}" 


文章来源: What do I need to further qualify the DataContext for a binding?