我有一个View,它有2个子视图,ViewModel分配给每个视图:
ViewA - ViewModelA
{
ViewB - ViewModelB
ViewC - ViewModelC
}
Run Code Online (Sandbox Code Playgroud)
ViewB有一个文本框,ViewC有一个组合框,我需要从ViewModelA访问这两个组合框.不是GUI控件本身,而是绑定值,即文本框的.Text和ComboBox的.SelectedItem.目前我只将ViewModelB和ViewModelC作为ViewModelA的属性,但感觉不对.
视图模型在不破坏MVVM模式的情况下相互通信的标准方法是什么?
我是MVC和实体框架的新手,我有一个关于正确/首选方式的问题.
我一直在关注Nerd Dinner MVC应用程序,因为我正在编写这个应用程序.我有一个页面,其中包含来自几个不同地方的数据.它显示来自几个不同表的详细信息,并且还具有查找表中的下拉列表.
我创建了一个包含所有这些信息的ViewModel类:
class DetailsViewModel {
public List<Foo> DropdownListData { get; set; }
// comes from table 1
public string Property1 { get; set; }
public string Property2 { get; set; }
public Bar SomeBarObject { get; set; } // comes from table 2
}
Run Code Online (Sandbox Code Playgroud)
在Nerd Dinner代码中,他们的例子有点过于简单化了.DinnerFormViewModel采用单个实体:Dinner.根据晚餐,它根据晚餐地点为各国创建一个SelectList.
由于简单,它们的数据访问代码也非常简单.他有一个简单的DinnerRepository,其方法名为GetDinner().在他的行动方法中,他可以做一些简单的事情:
Dinner dinner = new Dinner();
// return the view model
return View(new DinnerFormViewModel(dinner));
Run Code Online (Sandbox Code Playgroud)
要么
Dinner dinner = repository.GetDinner(id);
return View(new DinnerFormViewModel(dinner));
Run Code Online (Sandbox Code Playgroud)
我的查询比这复杂得多,从多个表中提取...创建一个匿名类型:
var query = from a in ctx.Table1
where …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc entity-framework repository-pattern viewmodel
我正在使用应用程序的第二个版本,作为重写的一部分,我必须转向MVVM架构.我正面临压力,要在视图模型类中放置绝对的所有代码 - 在代码隐藏文件中使用c#是不受欢迎的.(我知道,我知道......我知道背后的代码不是坏事,但这次不是我的电话).
对于实现命令界面的对象,这很容易.我已经能够找到大量关于如何将这些对象的Command绑定到视图模型中的ICommand的信息.问题是没有这种接口的对象,例如
<ListBox
x:Name="myListBox"
MouseDoubleClick="myCallbackFunction">
<!-- ... -->
</ListBox>
Run Code Online (Sandbox Code Playgroud)
我想知道如何将Listbox的MouseDoubleClick事件绑定到myCallbackFunction,这是在视图模型中实现的.这甚至可能吗?
谢谢!
使用当前的实践(至少使用WPF和Silverlight),我们在视图模型中看到通过命令绑定绑定的视图,或者我们至少看到视图模型中处理的视图事件.这似乎违反了SRP,因为视图模型不仅模拟视图状态,而且响应视图(用户).其他人已经询问如何构建视图模型而不违反SRP或询问他们的实现是否这样做(最后是MVC中的控制器,但大致类似).
那么目前的做法是否违反了SRP?或者"视图模型"真的是一组不违反SRP的东西?为了解决这个问题,似乎我们需要知道什么是单一责任,或者如果概念中有多个责任,个别职责是否分开,符合SRP.我不确定.
[View] ViewModel是一个"视图模型",意思是它是View的抽象,也用于视图和模型之间的数据绑定
对于SRP而言,这似乎已经足够了,但后来这篇文章说明了(我强调了)
[ViewModel]充当数据绑定器/转换器,将模型信息更改为View信息,并将命令从View传递到模型
在一篇关于视图模型角色的Prism博客文章中,作者说(再次,我的重点)
它归结为视图模型是以下的组合:
- 视图的抽象
- 命令
- 价值转换器
- 查看状态
我确定我错过了许多定义,但它们似乎属于以下类别:
如果你很好奇,我"关心"这个因为(2)感觉正确,但似乎与普遍的实施相反.
silverlight wpf single-responsibility-principle mvvm viewmodel
我试图在100%Kotlin应用程序中实现ViewModel.我能找到的每一篇文档都说我想用它来获取ViewModel实例:
ViewModelProviders.of(this).get(CustomViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)
根据文档,我应该能够导入:
import android.arch.lifecycle.ViewModelProviders
Run Code Online (Sandbox Code Playgroud)
但是这个导入尚未解决.我在我的构建文件中使用以下内容:
def androidArchVersion = '1.1.1'
implementation "android.arch.lifecycle:viewmodel:$androidArchVersion"
implementation "android.arch.lifecycle:livedata:$androidArchVersion"
annotationProcessor "android.arch.lifecycler:compiler:$androidArchVersion"
testImplementation "android.arch.core:core-testing:$androidArchVersion"
Run Code Online (Sandbox Code Playgroud)
为什么我不能访问ViewModelProviders?
android viewmodel gradle kotlin android-architecture-components
我有一段时间对此感到困惑.我正在RibbonWindow使用MVVM模式编写相当大的WPF应用程序.屏幕RibbonBar顶部有一个菜单,其余部分显示各种视图.某些视图包含其他视图,其中一些视图具有启动子窗口的按钮.
到目前为止,我一直在使用View代码隐藏文件执行此操作,但我知道在使用MVVM时这些文件应该是空的.我可以将子窗口启动代码移动到ViewModel,但是我需要一个对main的引用RibbonWindow(设置为子窗口所有者),这似乎不正确.
关于如何使用MVVM正常实现这一建议或提示将不胜感激.
使用MVC3,我应该设计我的视图模型,以便有一个绑定到视图(DisplayModel),还有一个回发到控制器(EditModel)?
为了澄清,我不是在询问数据模型与视图模型 - 我知道将视图/控制器绑定到数据/域模型并不好.
我也不是要求跨两个单独的视图共享一个模型,一个用于显示数据的视图,另一个用于编辑数据的视图.
相反,我问的是一个用于编辑数据的视图,以及绑定到视图的模型与绑定到控制器操作的模型.
换句话说,如果这是我的观点:
@model MyApp.Models.CustomerModel
Run Code Online (Sandbox Code Playgroud)
我的控制器动作应该是这样的:
public ActionResult Index(CustomerModel model)
Run Code Online (Sandbox Code Playgroud)
要么:
public ActionResult Index(CustomerEditModel model)
Run Code Online (Sandbox Code Playgroud)
有一次,我们正在做后者(单独).但最近,我们开始做前者(共享).
这种变化的原因是因为:
使用MVC3不引人注意的验证,如果我在我的模型上使用DataAnnotations进行验证,如果它们是分开的(在显示模型上映射客户端验证,在服务器端验证的编辑模型上),则需要在两个模型中使用它们. .
随着我们的应用程序的成熟,我们意识到我们的显示和编辑模型是95%相同的,除了我们的视图模型中的选择列表.我们现在将它们移动到一个共享类,现在通过视图传递它们.
但我已经看到其他一些讨论指出,让视图/控制器共享模型是一个坏主意,并且它违反了关注点的分离.
有人可以帮我理解这两种方法的权衡吗?
如果以前曾被问过,请道歉; 有一百万种方法来表达它,因此寻找答案已经证明是困难的.
我有一个具有以下属性的viewmodel:
public class AssignSoftwareLicenseViewModel
{
public int LicenseId { get; set; }
public ICollection<SelectableDeviceViewModel> Devices { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
SelectableDeviceViewModel的简化版本是这样的:
public class SelectableDeviceViewModel
{
public int DeviceInstanceId { get; set; }
public bool IsSelected { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的视图中,我试图在输入表单中显示Devices属性的可编辑复选框列表.目前,我的View看起来像这样:
@using (Html.BeginForm())
{
@Html.HiddenFor(x => Model.LicenseId)
<table>
<tr>
<th>Name</th>
<th></th>
</tr>
@foreach (SelectableDeviceViewModel device in Model.Devices)
{
@Html.HiddenFor(x => device.DeviceInstanceId)
<tr>
<td>@Html.CheckBoxFor(x => device.IsSelected)</td>
<td>@device.Name</td>
</tr>
}
</table>
<input type="submit" …Run Code Online (Sandbox Code Playgroud) 我一直在撞墙,我无法理解为什么会这样.我正在使用Android的新建筑组件,我在使用对象列表更新LiveData时遇到问题.我有两个旋转器.当我更改第一个选项时,第二个必须更改其内容.但最后一部分没有发生.谁能帮我?
State.java
@Entity(tableName = "states")
public class State{
@PrimaryKey(autoGenerate = false)
private int id;
private String name;
@ColumnInfo(name = "countryId")
private String CountryId;
@Ignore
private Object geoCenter, geoLimit;
public State(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getCountryId() {
return CountryId;
}
public void setCountryId(String countryId) {
CountryId = countryId;
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个Activity包含3 RecyclerViews.我需要填充RecyclerViews来自远程存储库的数据(3个不同的请求).我可以使用多个ViewModels在Activity,或者有没有更好的解决办法(最佳实践).
viewmodel ×10
mvvm ×4
android ×3
wpf ×3
android-architecture-components ×2
asp.net-mvc ×2
c# ×2
android-room ×1
binding ×1
checkboxfor ×1
childwindow ×1
dagger ×1
dagger-2 ×1
gradle ×1
kotlin ×1
silverlight ×1
single-responsibility-principle ×1
view ×1
xaml ×1