这是我的情况:
我有这个视图模型:
public class ViewModel
{
public DateTime someDate { get; set; }
public String someString { get; set; }
public List<E> someList { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我要做的是在视图中设置日期,写一些文本然后从E列表中选择任意数量的E.在操作中返回的ViewModel必须具有日期,文本并包含所选项的列表.
我需要知道的是如何处理所述列表.如何将每个选定的项目添加到模型的列表中.我正在考虑public bool selected向E 添加属性,然后发送所有项目并过滤服务器上的所选项目,但是我不愿意来回发送所有数据,因为列表可能非常大.
我正在使用带有剃刀和JQUERY AJAX的MVC3用于我的所有表单帖子.
如果我不清楚,请告诉我.
谢谢.
我在PluralSight的Brian Lagunas的课程中学习MVVM.
一开始,他正在编写这两个接口:
public interface IView
{
IViewModel ViewModel {get;set;}
}
public interface IViewModel
{
IView View {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
我在那种模式下学习,然后他从IView中删除了ViewModel.
public interface IView {}
Run Code Online (Sandbox Code Playgroud)
但我看不出它的区别,也许它的优点和缺点.如果我把第一个例子弄错了,有什么不对吗?
我想将我的View对象发送到我的ViewModel,我该如何在WPF MVVM中执行此操作.
注意:
实际上我想要做的是..我有一个MainWindow,我没有关注MVVM,这个MainWindow有一个Canvas,我将所有的视图都放在UserControls中.现在从一个名为Stock的特殊视图我想要将一个UserControl"另一个视图"添加到按钮上的Canvas子项中从Stock View中单击
我只想检查视图模块(即CSHTML)中模型的数据,我的尝试是这样的
@model CCG.Models.RatingConverter
<table>
<tbody>
<tr>
@if (Model.ToString()!="A")
{
<td class="row" ><%- Rating %></td>
}
</tr>
</tbody>
</table>
Run Code Online (Sandbox Code Playgroud)
我收到Null Reference Exception错误..所以请任何人知道..
我在MVC,linq和viewmodels方面相当新.我设法让创建和索引视图工作."插入"并不像"列表"那么难.
我有这个linq查询:
public ActionResult Index()
{
List<BlendElVM> BEVM = new List<BlendElVM>();
var list = (from Blend in db.blends
join BlendEl in db.blendEl on Blend.ID equals BlendEl.ID
select new
{
Blend.ID, Blend.Title, Blend.TransDt, BlendEl.Comment
}).ToList();
foreach (var item in list)
{
BlendElVM o = new BlendElVM(); // ViewModel
o.Comment = item.Comment;
o.Title = item.Title;
o.TransDt = item.TransDt;
o.ID = item.ID;
BEVM.Add(o);
}
return View(BEVM);
}
Run Code Online (Sandbox Code Playgroud)
我不确定的是"foreach"部分.当我在调试中运行时,"列表"显示正常,但如果我注释掉"foreach",我会收到错误 - 即不期待模型.foreach做了什么?它与数据库有关,但我不明白它在哪里使用"o"并设置列.我以为它都会在一个linq查询中.是否有可能将两者结合起来并消除"foreach"?
我对 WPF 相当新手。我的理解是模型中的数据发生变化,它应该通知视图模型,并且视图将绑定到视图模型中的属性和类似的东西。它是否正确?如果是这样,我一直在读该模型应该实现INotifyPropertyChanged,并且看起来像这样
public class LoginModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
public bool Authenticated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的 ViewModel 中,我有一个属性“AuthResult”,它应该从模型属性“Authenticated”获取更新
public partial class view1 : UserControl, INotifyPropertyChanged{
public bool AuthResult
{
get
{
return _authVal;
}
set
{
_authVal = value;
NotifyPropertyChanged("AuthResult");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propName));
}
}
Run Code Online (Sandbox Code Playgroud)
我知道当前的实施是不正确的。我发现我应该从我的模型订阅 PropertyChanged 通知,如下所示:
LoginModel.PropertyChanged += new System.ComponentModel.PropertyChangedEventHandler(LoginModel_PropertyChanged); …Run Code Online (Sandbox Code Playgroud) 我有一个关于 ViewModel 中对象的可见性将如何改变的问题。
我来告诉你我的情况:我有一个登录界面,有两个Edittexts和两个按钮,一个按钮和一个Edittext默认是不可见的,我想要可见的按钮使第一个Edittext和我点击的按钮不可见并使第二个按钮和第二个 Edittext 可见。这就是问题所在,我可以在 Activity 中完成所有这些,但我需要在 ViewModel 中完成,我不知道如何从那里访问 xml 组件。
我知道这一切都很混乱,所以我会发送课程,如果有人能告诉我如何做到这一点,我将不胜感激。谢谢你。谢谢你。
登录 XML:
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="com.quobis.sippo.ecco.viewmodel.LoginViewModel"/>
</data>
<android.support.constraint.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context="LoginUser">
<ImageView
android:layout_width="250dp"
android:layout_height="200dp"
android:src="@drawable/logom"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.2"
/>
<EditText
android:id="@+id/usr"
android:layout_width="200dp"
android:layout_height="50dp"
android:hint="@string/hint_user"
android:textSize="18sp"
android:textColorPrimary="@color/colorLetterLogin"
android:backgroundTint="@color/colorBackButtLogin"
android:elevation="20dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginLeft="60dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6"
app:addTextChangedListener="@{viewModel.emailTextWatcher}"
/>
<Button
android:id="@+id/btn_usr"
android:layout_width="55dp"
android:layout_height="50dp"
android:background="@color/colorBackButtLogin"
android:drawableBottom="@drawable/ic_keyboard_arrow_right"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginLeft="260dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.6"
android:onClick="@{viewModel::onUserClicked}"
/>
<EditText
android:id="@+id/pass"
android:layout_width="200dp"
android:layout_height="50dp"
android:hint="@string/hint_pass"
android:textSize="18sp"
android:shape="rectangle"
android:inputType="textPassword"
android:textColorPrimary="@color/colorLetterLogin"
android:backgroundTint="@color/colorBackButtLogin"
android:elevation="20dp"
app:layout_constraintBottom_toBottomOf="parent"
android:layout_marginLeft="60dp" …Run Code Online (Sandbox Code Playgroud) 是否可以在同一视图中使用多个视图模型?
我试图通过@model属性使用viewmodel
但是,如果我可以使用第二个viewModel,我会陷入困境,我将第二个放置在哪里?
我正在尝试在我的内部使用ViewModel,EarthquakeActivity但我一直收到此错误:
Wrong 1st argument type. Found: 'com.example.android.quakereport.EarthquakeActivity', required: 'androidx.lifecycle.LifecycleOwner'
Run Code Online (Sandbox Code Playgroud)
这是从我尝试做的时候开始的
mainViewModel.getEarthquakeData().observe(this, new Observer<List<Earthquake>>() {
@Override
public void onChanged(List<Earthquake> earthquakes) {
// do something
}
});
Run Code Online (Sandbox Code Playgroud)
在this这活动返回一个错误.
我读到这里是AppCompatActivity已经延伸LifecycleOwner,这是我使用的是什么.这有什么不对?每个其他教程都没有这个问题.
我的EarthquakeActivity.java:
package com.example.android.quakereport;
import android.arch.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.DividerItemDecoration;
import android.support.v7.widget.LinearLayoutManager;
import android.support.v7.widget.RecyclerView;
import java.util.ArrayList;
import java.util.List;
import POJO.Earthquake;
import POJO.RootEarthquakeResponse;
import androidx.lifecycle.Observer;
import retrofit2.Call;
public class EarthquakeActivity extends AppCompatActivity {
private RecyclerView recyclerView;
private RecyclerView.Adapter adapter;
private LinearLayoutManager layoutManager;
public …Run Code Online (Sandbox Code Playgroud) java android viewmodel gradle android-architecture-components
我正在尝试在 Fragment 中初始化视图模型,但是每次我想在我的视图模型构造函数中传递接口时,它都会抛出错误无法创建类 ViewModel 的实例 而且我在kotlin-kapt或任何生命周期注释中没有任何问题
这是我的 ViewModel 类
class SettingsViewModel (
var settingsView: SettingsView
) : ViewModel(){ }
Run Code Online (Sandbox Code Playgroud)
这是我要初始化视图模型的片段
class SettingsFragment : Fragment(), SettingsView {
var viewmodel :SettingsViewModel? = null
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
// Inflate the layout for this fragment
viewmodel = ViewModelProviders.of(this).get(SettingsViewModel(this)::class.java)
val binding =
DataBindingUtil.inflate<FragmentSettingsBinding>(inflater, R.layout.fragment_settings, container, false)
.apply{}
return binding.root
}
Run Code Online (Sandbox Code Playgroud)