这个问题几乎说明了一切.
我有一个窗口,并尝试使用完整的命名空间将DataContext设置为ViewModel,但我似乎做错了.
<Window x:Class="BuildAssistantUI.BuildAssistantWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="BuildAssistantUI.ViewModels.MainViewModel">
Run Code Online (Sandbox Code Playgroud) 我想构建一个移动应用程序,除了html/css和JavaScript之外别无其他.虽然我对如何使用JavaScript构建Web应用程序有很好的了解,但我想我可能会看一下像jquery-mobile这样的框架.
起初,我认为jquery-mobile仅仅是针对移动浏览器的小部件框架.与jquery-ui非常相似,但对于移动世界而言.但我注意到jquery-mobile不止于此.它带有一堆架构,让你用声明性的html语法创建应用程序.因此,对于最容易思考的应用程序,您不需要自己编写一行JavaScript(这很酷,因为我们都喜欢少工作,不是吗?)
为了支持使用声明性html语法创建应用程序的方法,我认为将jquery-mobile与knockoutjs结合起来是一个很好的选择.Knockoutjs是一个客户端MVVM框架,旨在将WPVM/Silverlight中的MVVM超级功能引入JavaScript世界.
对我来说MVVM是一个新世界.虽然我已经阅读了很多关于它的内容,但我以前从未真正使用它.
所以这篇文章是关于如何使用jquery-mobile和knockoutjs一起构建应用程序.我的想法是写下我看了几个小时后想出来的方法,并有一些jquery-mobile/knockout yoda来评论它,告诉我为什么它糟透了,为什么我不应该在第一次编程地方;-)
HTML
jquery-mobile在提供页面的基本结构模型方面做得很好.虽然我很清楚我之后可以通过ajax加载我的页面,但我决定将它们全部保存在一个index.html文件中.在这个基本场景中,我们谈论的是两个页面,因此不应该太难以掌握一切.
<!DOCTYPE html>
<html>
<head>
<title>Page Title</title>
<link rel="stylesheet" href="libs/jquery-mobile/jquery.mobile-1.0a4.1.css" />
<link rel="stylesheet" href="app/base/css/base.css" />
<script src="libs/jquery/jquery-1.5.0.min.js"></script>
<script src="libs/knockout/knockout-1.2.0.js"></script>
<script src="libs/knockout/knockout-bindings-jqm.js" type="text/javascript"></script>
<script src="libs/rx/rx.js" type="text/javascript"></script>
<script src="app/App.js"></script>
<script src="app/App.ViewModels.HomeScreenViewModel.js"></script>
<script src="app/App.MockedStatisticsService.js"></script>
<script src="libs/jquery-mobile/jquery.mobile-1.0a4.1.js"></script>
</head>
<body>
<!-- Start of first page -->
<div data-role="page" id="home">
<div data-role="header">
<h1>Demo App</h1>
</div><!-- /header -->
<div data-role="content">
<div class="ui-grid-a">
<div class="ui-block-a">
<div class="ui-bar" style="height:120px">
<h1>Tours today (please wait 10 seconds to see the effect)</h1>
<p><span data-bind="text: toursTotal"></span> …
Run Code Online (Sandbox Code Playgroud) 我使用a创建一个登录,window control
以允许用户登录WPF
我正在创建的应用程序.
到目前为止,我已经创建了一种方法,用于检查用户是否已输入正确的凭据,username
并password
在textbox
登录屏幕上输入binding
两个properties
.
我通过创建一个bool
方法来实现这一点,就像这样;
public bool CheckLogin()
{
var user = context.Users.Where(i => i.Username == this.Username).SingleOrDefault();
if (user == null)
{
MessageBox.Show("Unable to Login, incorrect credentials.");
return false;
}
else if (this.Username == user.Username || this.Password.ToString() == user.Password)
{
MessageBox.Show("Welcome " + user.Username + ", you have successfully logged in.");
return true;
}
else
{
MessageBox.Show("Unable to Login, incorrect credentials.");
return false;
}
} …
Run Code Online (Sandbox Code Playgroud) 应该绑DataGrid
一个
ICollectionView = CollectionViewSource.GetDefaultView(collection)
或者
ObservableCollection<T> collection;
???
MVVM的最佳实践是什么?为什么?
为了掌握MVVM的概念,我已经阅读了几个博客并查看了一些项目.
根据我的理解,一个视图是愚蠢的,它只知道如何呈现传递给它的东西.
模型只是普通数据,而ViewModel就像两者之间的填充,它应该从模型中获取信息并将其传递给View,View应该知道如何呈现它.或者反过来说,如果视图中的信息发生变化,它应该将更改传递给模型.
但我仍然不知道如何应用这个概念.有人可以解释一个非常简单的场景,以便我能掌握这个概念吗?我已经看过几个项目,但它仍然没有完全合理,所以如果有人能用简单的英语写出来,那就太好了.
我是一个巨大的淘汰赛粉丝.我现在用它来进行我的所有网络开发,只是喜欢它.我无法弄清楚的一件事是如何在构建knockoutjs绑定时隐藏UI.
例如,我有一个非常强大的用户界面,我的页面上使用了很多模板.我注意到的问题是,当用户第一次访问页面时,他们会在绑定启动之前看到我的所有模板,并隐藏它们.
解决此问题的最佳方法是什么?我已经尝试使用辅助类来隐藏它们,但是除非我删除了辅助类引用(即ui-helper-hidden),否则模板不能使用'visible'和'if'绑定显示.
什么是之间的差异的RoutedCommand和RelayCommand?何时使用RoutedCommand以及何时在MVVM模式中使用RelayCommand?
我有一个关于WPF MVVM的问题,这让我感到沮丧.
为什么这样做:?
MainWindow.xaml:
<Window x:Class="MVVMProject.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
<Grid>
<ContentControl Content="{Binding}"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
将您的ExampleView.xaml设置为:
<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vms="clr-namespace:MVVMProject.ViewModels">
<DataTemplate DataType="{x:Type vms:ExampleVM}" >
<Grid>
<ActualContent/>
</Grid>
</DataTemplate>
</ResourceDictionary>
Run Code Online (Sandbox Code Playgroud)
并创建如下窗口:
public partial class App : Application {
protected override void OnStartup(StartupEventArgs e) {
base.OnStartup(e);
MainWindow app = new MainWindow();
ExampleVM context = new ExampleVM();
app.DataContext = context;
app.Show();
}
}
Run Code Online (Sandbox Code Playgroud)
什么时候可以这样做:?
App.xaml :(设置启动窗口/视图)
<Application x:Class="MVVMProject.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
StartupUri="ExampleView.xaml">
</Application>
Run Code Online (Sandbox Code Playgroud)
ExampleView.xaml :(窗口不是ResourceDictionary)
<Window x:Class="MVVMProject.ExampleView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vms="clr-namespace:MVVMProject.ViewModels">
>
<Window.DataContext>
<vms:ExampleVM />
</Window.DataContext>
<Grid> …
Run Code Online (Sandbox Code Playgroud) 我发现的所有淘汰示例似乎都使用以下内容在ObservableArray的末尾添加了一个新项:
viewModel.SomeItems.push(someNewItem);
Run Code Online (Sandbox Code Playgroud)
这当然将项目放在数组的末尾.
如何在特定位置向ObservableArray添加项?
例如.就像是:
viewModel.SomeItems.push(someNewItem, indexToInsertItAt);
Run Code Online (Sandbox Code Playgroud) 有没有办法将其他参数传递给我的自定义AndroidViewModel
构造函数,除了Application上下文.例:
public class MyViewModel extends AndroidViewModel {
private final LiveData<List<MyObject>> myObjectList;
private AppDatabase appDatabase;
public MyViewModel(Application application, String param) {
super(application);
appDatabase = AppDatabase.getDatabase(this.getApplication());
myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param);
}
}
Run Code Online (Sandbox Code Playgroud)
当我想要使用我的自定义ViewModel
类时,我在我的片段中使用此代码:
MyViewModel myViewModel = ViewModelProvider.of(this).get(MyViewModel.class)
Run Code Online (Sandbox Code Playgroud)
所以我不知道如何将额外的参数传递String param
给我的自定义ViewModel
.我只能传递Application上下文,但不能传递其他参数.我真的很感激任何帮助.谢谢.
编辑:我添加了一些代码.我希望现在好多了.
mvvm ×10
wpf ×4
c# ×3
knockout.js ×3
.net ×2
javascript ×2
xaml ×2
android ×1
architecture ×1
command ×1
data-binding ×1
relaycommand ×1
viewmodel ×1