是否可以将带有canvas的itemscontrol作为模板绑定到多个DataTemplates?
我有2个集合,根据类型我想在画布上显示不同的控件.
我不确定,但我可以考虑一个有2个ObservableCollections的Viewmodel.例如,如果我有"形状"和"连接",我想在画布上显示它们?如果是一个绘图场景......
我想以mvvm方式执行此操作,我不确定多个DataTemplate方法是否正确但我想到了这一点.但是我仍然有问题要把绑定直接放在我脑海里.如果我为我设置DataContext到ViewModel似乎不可能将2个集合绑定到items控件... =(我也对其他想法开放....
这可能吗?如果是这样,绑定将如何看起来像
我正在用C#开发一个ASP.NET MVC 3应用程序,我使用Razor.我现在正处理一个问题,涉及通过Controller向View传递/接收的ViewModel绑定对象.让我们说清楚.我有以下ViewModels:
public class ContainerViewModel
{
public int ContainerId {get; set;}
public string ContainerName {get; set;}
public List<ItemPostModel> ItemData {get; set;}
}
public class ItemPostModel
{
public int ItemId {get; set;}
public string ItemName {get; set;}
public int ItemValue {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
该ContainerViewModel用于将数据传递给视图.其属性ContainerId和ContainerName仅用于显示目的.该List<ItemPostModel>酒店于使用填充表单.View看起来像这样(它是简化版):
<strong>@Model.ContainerName</strong>
@using (Html.BeginForm())
{
<fieldset>
@foreach(var item in Model.ItemData)
{
@Html.TextBox(item.ItemId);
@Html.TextBox(item.ItemName);
@Html.TextBox(item.ItemValue);
<p>
<input type="submit" value="Save" />
</p>
}
</fieldset>
}
Run Code Online (Sandbox Code Playgroud)
该控制器相应的操作方法 …
我正在尝试理解和设计您的应用程序/域模型(POCO/DTO)的良好实践.
假设我有以下数据库表,帐户:
UserID int
Email varchar(50)
PasswordHash varchar(250)
PasswordSalt varchar(250)
Run Code Online (Sandbox Code Playgroud)
当然,EF4会像这样构建实体:
public class Account
{
public int UserID { get; set; }
public string Email { get; set; }
public string PasswordHash { get; set; }
public string PasswordSalt { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,假设我有一个用于注册新用户的视图模型,可能看起来像这样:
public class RegistrationViewModel
{
public string Email { get; set; }
public string Password { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
最后,我有一个需要注册用户的服务:
public class RegistrationService
{
public void RegisterUser(??? registration)
{
// Do stuff to register user …Run Code Online (Sandbox Code Playgroud) 我是 mvvm 模式的新手。我为主要活动创建了一个 ViewModel。现在我想在主活动中获取 ViewModel 的一个实例。
Stackoverflow 上的大多数教程和答案都建议使用ViewModelProviders.of(...,但已弃用。
因此,根据stackoverflow上的这个问题:ViewModelProviders is deprecated in 1.1.0 main activity in onCreate,我执行以下操作(我可以发誓我已经运行了它):mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);
但是,我收到一个错误消息,告诉我没有找到合适的构造函数。
error: no suitable constructor found for ViewModelProvider(MainActivity)
或者,绝对清楚,MainActivity 应为 ViewModelStoreOwner,我创建了一个变量
ViewModelStoreOwner vmso = this;并将该变量放入构造函数中,如下所示:
mainActivityViewModel = new ViewModelProvider(vmso).get(MainActivityViewModel.class);
目前我将我的域对象传递给我的视图,并从POST直接绑定到它们.每个人都说这很糟糕,所以我试图添加ViewModel概念.
但是,我找不到一种方法来非常优雅地做到这一点,而且我想知道其他人的解决方案是什么,最终不会出现非常混乱的控制器动作.
一些"添加人"功能的典型过程如下所示:
在控制器动作中执行所有这些操作(忽略GET)肯定不是SRP或DRY.
我试图想办法打破这个过程,以便它遵守SRP,干净,模块化,最重要的是可测试.
人们有什么解决方案?
我一直在尝试使用自定义控制器动作调用器来将关注点分成单独的方法,智能模型绑定器和简单的暴力,但我还没有遇到过满意的解决方案.
PS因为它增加了如此多的复杂性,让我相信为什么我甚至需要打扰
视图模型应该仅限于属性,而不是方法吗?
假设我的视图中有一个单选按钮,想要查看是否应该选中单选按钮.
我完全可以在我看来这样做:
@Html.RadioButton("radiobuttonName", "The value", (id == Model.PersonId))
Run Code Online (Sandbox Code Playgroud)
或者我可以将此逻辑移动到viewmodel中:
@Html.RadioButton("radiobuttonName", "The value", Model.IsChecked(id)
Run Code Online (Sandbox Code Playgroud)
在viewmodel中使用此方法:
public int PersonId { get;set;}
public bool IsChecked(int id)
{
return (id == PersonId);
}
Run Code Online (Sandbox Code Playgroud)
可以这样做,还是应该完全在视图中或以其他方式完成?
我有多个视频显示它们与Mainviewmodel中的视频选择绑定.一切正常,直到我尝试将enter命令绑定到Mainviewmodel.我不知道这个的语法.目前,绑定设置为Video而不是Mainviewmodel.
错误信息:
'StartVideoCommand' property not found on 'object' ''Video'
Run Code Online (Sandbox Code Playgroud)
XAML:
<Window.Resources>
<local:MainViewModel x:Key="MainViewModel"/>
</Window.Resources>
<Grid DataContext="{StaticResource MainViewModel}">
<ListBox ItemsSource="{Binding Videos}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.InputBindings>
!!! <KeyBinding Key="Enter" Command="{Binding StartVideo}" /> !Bound to Video not to Mainviewmodel grrr
</Grid.InputBindings>
... layout stuff
<TextBlock Text="{Binding Title}" Grid.Column="0" Grid.Row="0" Foreground="White"/>
<TextBlock Text="{Binding Date}" Grid.Column="0" Grid.Row="1" Foreground="White" HorizontalAlignment="Left"/>
<TextBlock Text="{Binding Length}" Grid.Column="1" Grid.Row="1" Foreground="White" HorizontalAlignment="Right"/>
... closing tags
Run Code Online (Sandbox Code Playgroud) 我是WPF编程环境中的新手.我正在尝试使用MVVM设计模式编写程序.
我做了一些研究并阅读了一些与之相关的文章,很多时候我遇到过这个问题
ViewModelBase
我知道它是什么..但是我可以具体知道我应该从哪里开始写出我自己的ViewModelBase吗?就像......真正了解正在发生的事情而不会变得太复杂.谢谢 :)
我有一个名为SharedViewModel的ViewModel:
public class SharedViewModel<T> extends ViewModel {
private final MutableLiveData<T> selected = new MutableLiveData<>();
public void select(T item) {
selected.setValue(item);
}
public LiveData<T> getSelected() {
return selected;
}
}
Run Code Online (Sandbox Code Playgroud)
我在Google的Arch ViewModel参考页面上基于SharedViewModel示例实现它:
活动中的两个或更多个片段需要彼此通信是很常见的.这绝不是微不足道的,因为两个片段都需要定义一些接口描述,并且所有者活动必须将两者绑定在一起.而且,两个片段必须处理尚未创建或不可见的其他片段的情况.
我有两个片段,叫做ListFragment和DetailFragment.
到现在为止我用里面称这两个片段MasterActivity.一切都运作良好.
我得到了ViewModel ListFragment,选择了要使用它的值DetailFragment.
mStepSelectorViewModel = ViewModelProviders.of(getActivity()).get(SharedViewModel.class);
Run Code Online (Sandbox Code Playgroud)
但是,现在我需要在某些情况下ListFragment(将不同设备配置的布局)添加到另一个名为的活动中DetailActivity.有没有办法像上面的例子那样做?
android viewmodel android-fragments android-activity android-architecture-lifecycle
我有一个ViewModel,它接受一些Model数据并略微改变它.
我这样做的方式"有效",因为我只是将其传递DomainModel给构造函数ViewModel,但由于我在一些一对一的ViewModel上使用AutoMapper,我想我会尝试学习如何做跨所有ViewModel的映射.
这是ViewModel的一个例子,它可以做一些额外的工作.
public class UsersDetailsViewModel
{
public string UserName { get; set; }
public string Email { get; set; }
public string Website { get; set; }
public int ID { get; set; }
public List<OpenID> OpenIds { get; set; }
public string UserAge { get; set; }
public string About { get; set; }
public string Slug { get; set; }
public System.DateTime LastSeen { get; set; }
public string Region { get; set; …Run Code Online (Sandbox Code Playgroud) viewmodel ×10
asp.net-mvc ×3
c# ×3
mvvm ×3
wpf ×3
android ×2
binding ×2
android-architecture-lifecycle ×1
androidx ×1
automapper ×1
data-binding ×1
datatemplate ×1
itemtemplate ×1
silverlight ×1