c# - 我需要什么来进一步限定 DataContext 以进行绑定(bind)?

标签 c# wpf data-binding mvvm

我已经创建并将在这个问题中引用的文件是:

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 设置为绑定(bind)到的 Technicians 属性声明它由于未知的 DataContext 无法解析 Technicians。

因此,如果我们查看我的 TechnicianSelectionView.cs 代码隐藏...

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

    public TechnicianSelectionView()
    {
        InitializeComponent();

        Technician.GenerateSeedData();

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

...我们看到我正在将 View 的 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 上的一个属性...

既然已经为 View 设置了 DataContext,为什么它不能将 ViewModel 上的 Technicians 解析为它要绑定(bind)到的 DataContext/属性?

编辑:

根据下面评论中的问题。这是一个设计时问题,而不是编译时问题。我应该在一开始就指出这一点。

最佳答案

您需要在 xaml 中指定数据上下文的类型以获得设计时支持。即使您在代码隐藏中分配了数据上下文,设计者也不会识别它。

尝试将以下内容放入您的 xaml 中:

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

参见 this link了解更多详情。

关于c# - 我需要什么来进一步限定 DataContext 以进行绑定(bind)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15101696/

相关文章:

如果文本不适合 TextBlock,WPF XAML 将显示省略号

javascript - 如何使用 jQuery 数据绑定(bind) HTML 属性

c# - 使用绑定(bind)的 UI 反馈边框

c# - 在 MVVM 中使用一个 View 对多种类型进行 CRUD

c# - 在 HTTP GET 中绑定(bind) en-GB 日期

c# - 使用 AppDomain.AssemblyResolve 事件

c# - Elmah 抛出 ObjectDisposedException

c# - WPF 在 Style 中设置 ColumnDefinition.Width 不起作用?

wpf - 应用 CollectionView 筛选器后如何绑定(bind) DataGrid 行计数?

c# - 识别字节数组naudio中的静默数据包