- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 MVVM Light WPF 应用程序中使用 Entity Framework 6。我想将应用程序的 DbContext
从 MainWindow.xaml
传递到用户控件的 View 模型。
用户控件的 View 模型是 SearchEmployeeViewModel.cs
并且具有以下构造函数:
public SearchEmployeeViewModel(MyEntities context)
{
Context = context;
// Other code...
}
MainWindow.xaml
使用它声明用户控件,这是我尝试的最大程度:
<usercontrol:SearchEmployeeControl>
<ObjectDataProvider ObjectType="{x:Type data:MyEntities}">
<ObjectDataProvider.ConstructorParameters>
<data:MyEntities >
</data:MyEntities>
</ObjectDataProvider.ConstructorParameters>
</ObjectDataProvider>
</usercontrol:SearchEmployeeControl>
应用程序的 DbContext
以这种方式在 MainViewModel.cs
构造函数中实例化:
_context = new MyEntities();
如何通过 MainWindow.xaml
将此 EF DbContext
传递到 SearchEmployeeViewModel.cs
构造函数中?我正在尝试做类似的事情,但传递整个数据上下文对象:Where to create parametrized ViewModel?
更新:我正在尝试将 EF DbContext 传递给用户控件。
最佳答案
您使用此 MVVM 进行了标记,因此此答案将基于使用 MVVM。
View 不应该创建对象或尝试分配值...它只是为了用户可以用来与之交互的 ViewModel/Models 的用户友好反射(reflect)。
你现在拥有的似乎是:
这是不正确的,因为 View 不应该像这样负责创建对象或分配值。
你想要的 MVVM 是
所以你应该有这样的东西:
protected override void OnStartup(StartupEventArgs e)
{
base.OnStartup(e);
var app = new MainWindow();
var dbContext = new MyEntities();
var context = new MyViewModel(dbContext);
app.DataContext = context;
app.Show();
}
AppStartup 负责任何类型的应用程序初始化,例如创建 EF DataContext 或 ViewModel。
从 View 中,您可以编写如下内容
<DataTemplate DataType="{x:Type local:SearchEmployeeViewModel}">
<userControl:SearchEmployeeControl />
</DataTemplate>
这将告诉 WPF
Anytime you encounter an object of type
SearchEmployeeViewModel
in the VisualTree, draw it usingSearchEmployeeControl
, and set theDataContext
of that control toSearchEmployeeViewModel
.
通常,ViewModels 通过 Content
或 ItemsSource
属性插入到 UI 中,如下所示:
<ContentControl Content="{Binding SearchEmployeeViewModel}" />
<TabControl Content="{Binding TabViewModels}" />
我还有一个 Simple MVVM Example on my blog如果您有兴趣了解更多信息,或者我强烈建议您阅读 What is this "DataContext" you speak of?如果您是 WPF 的新手,并且对 DataContext 是什么或它的工作原理还没有深入的了解。
就是说,如果您想让 View 像您在问题中那样分配 ViewModel 的值,您的选择是
ViewModel.Context
更改为 DependencyProperty,并使用 OneWayToSource
绑定(bind)模式对其进行绑定(bind),这意味着绑定(bind)只能通过将值从 View 传输到 ViewModel 来实现。我不推荐其中任何一种,而是宁愿重新设计以在 MVVM 中正确地执行此操作,但是如果我被迫选择一个,我会选择使用代码隐藏。此时你已经违反了一堆规则,所以为什么不再违反 :)
关于c# - 通过 XAML 将数据库上下文传递给用户控件的 VM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36334531/
我想创建一个包含一堆其他 XAML 文件的主 XAML 文件。这可能吗? 最佳答案 在您的主 Xaml 中,使用 项目控件 balise 和 Xaml 组合器,您必须使用 定义您的项目用户控件 代替
如何在 xaml 中更改 ToggleSwitch 中实际开关的大小?我可以更改 OnContent 和 OffContent 的文本大小,但滑动开关永远不会更改大小。 这些都不会改变开关本身的大小,
我有一个文本 block 列表,其中可能包括里面的 url,比如: 构建失败,请在此处查看更多信息:http://... 构建成功 应用 http://myapp/无法启动,请在此处查看更多信息:ht
我想做的事 我最近一直在探索 XAML 资源字典。它们非常强大,但为了减少(甚至进一步)为适应任何修改而需要进行的更改,我想使用一些基本的算术运算来更改 HeightRequest Entry 的属性
我使用以下代码创建了一个弹出窗口,但我不知道如何将它居中 我试图在运行时自动更改边距,但我不知道该怎么做,但是有人知道如何将弹出窗口居中吗? 它没有标准维度,因为我需要全局化我的程序
哪种类型的命名更适合在 XAML 中使用: xmlns:inventoryControls="clr-namespace:Inventory.Components.Controls;assembly=
我正在尝试格式化我的 string每 3 位有逗号,如果不是整数,则为小数。我检查了大约 20 个示例,这是我最接近的示例: 但我得到一个 The property 'StringFormat' w
在 Windows Phone 8 中,我想将一个图像放在一个圆圈中。是否有类似网格的圆形容器?我知道有椭圆位它不是容器 最佳答案 这是我如何做到的。
有没有办法在 XAML 中检查逻辑非逻辑。我试图绑定(bind)到广泛使用的属性,但是对于这些新的绑定(bind),它的方式是错误的。我不想修改属性,那么有没有办法在 xaml 中反转 bool 结果
在 html 中可以说 width="20%"。这在 XAML 中当然是不允许的。有谁知道为什么会这样或者有没有办法在 XAML 中获得百分比值支持? 最佳答案 网格列定义和行定义允许比例单位(除了固
我可以动态创建 XAML 并将其弹出到我的应用程序中吗?该怎么做呢? 最佳答案 是的,这很简单: XmlReader tXml = XmlReader.Create(myXamlString); UI
简短版: 如果不使用 xamlc 预编译 xaml,应用程序中捆绑了什么以在运行时编译 xaml?它是否取决于 xamarin.forms nugets 之外的应用构建时的当前工具集? 长版: 我们有
我知道如何显示内容页面,但如何根据方向选择正确的布局。我想编写 xaml 文件:一个用于垂直方向,另一个用于水平方向。方向改变时是否可以切换xaml文件 最佳答案 Xamarin.Forms does
我是一名 Android 开发者,我是 Windows Phone 8 的新手 最近我做了一个 android 应用程序..所以我想在 Windows Phone 8 中开发具有相同 View 和相同
在库中编译 XAML 时出现以下错误: Themes\Generic.xaml(35,12): XamlCompiler error WMC0610: XBF generation error cod
我需要在几个不同的 XAML 布局文件中包含一个通用的 XAML。 我不想在其他 XAML 文件中对重复的 XAML 部分进行硬编码。 怎么做包含? 最佳答案 你能把共享代码变成UserControl
我想像这样添加一个符号: 这行不通,所以我尝试用\分隔,但也行不通。有人对我如何做到这一点有任何建议吗? 最佳答案 其实这个问题不是关于XAML的,它只是一个纯XML的问题。 XML中有些字符需要转
我在 Xaml 中定义了这样的列表。 #3599B8 #374649 #FD625E #F2C80F
在向 Microsoft 报告之前,我想在这里问一下。我有一个问题,我无法看到我的 WinUI 3 应用程序的实时可视化树。我什至看不到应用程序内工具栏。我可以在 WPF 和 UWP 应用程序中看到,
我已经定义了一个动画作为一个资源,当通过这样的 EventTrigger 调用时它可以工作: 然后
我是一名优秀的程序员,十分优秀!