- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
想看看是否有人可以帮我解决这个问题?从 XAML 元素到 ViewModel(ex:1) 中的值,或者从 CodeBehind(ex:2) 返回到元素,如 HostName.Text,DataBinding 是否有优势?
<TextBlock Text="{Binding HostName}" /> --- (ex:1)
<TextBlock Name="HostName" /> --- (ex:2)
离岸博彩
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Task;
namespace AppName.Models
{
public class Contact
{
[Key]
public int Id {get; set;}
public string Team { get; set;}
public string FirstName { get; set;}
public string LastName { get; set;}
public string Phone { get; set;}
public string Email { get; set;}
public string Role { get; set;}
public string DisplayName => $"[LastName}, {FirstName}";
}
}
最佳答案
答案很简单,这取决于您的应用和需求。当您构建小型应用程序时,使用代码隐藏或数据绑定(bind)来查看模型并没有太大区别。很容易理解流程以及何时进行更新。但是随着应用程序复杂性的增加和测试代码的需要,您开始使用使代码更易于维护和测试的模式。这就是 MVVM 模式的由来。
在您的代码隐藏文件中测试代码比在您的 ViewModel 类中测试您的业务逻辑并确保它按预期工作更难。
你上面的例子有点简单,因为它是一个只显示文本而不接受输入的 TextBlock。 TextBox 是一个更好的绑定(bind)示例,因为数据可以在 View 模型或 UI 中更改。绑定(bind)使您可以使用属性支持显示的文本,因此从任何方向进行的更改都会自动更新模型属性和 UI。
<TextBox x:Name="Entry" Text="{Binding SelectedValue , Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
View 模型:
public class CatalogViewModel : BindableBase
{
private string selectedValue;
public string SelectedValue
{
get { return selectedValue; }
set { SetProperty<string>(ref selectedValue, value); }
}
...
}
替代方法是代码隐藏文件中的大量代码,以保持 TextBox 和数据元素之间的同步。
<TextBox x:Name="Entry2" TextChanged="Entry2_TextChanged" />
代码隐藏:
private string entryText;
public string EntryText
{
get { return entryText; }
set
{
if (value != entryText)
{
entryText = value;
Entry2.Text = entryText;
}
}
}
private void Entry2_TextChanged(object sender, TextChangedEventArgs e)
{
entryText = Entry2.Text;
}
private void Page_Loaded(object sender, RoutedEventArgs e)
{
// initialize controls
EntryText = "Default";
}
您现在已将业务逻辑与页面布局相结合,对其中任何一个的更改都会导致大量更改。测试代码的行为更难编写,也更难模拟。
它只会因多个输入控件和更复杂的控件(如 ListView 和 GridView)而变得更加复杂。
如果您对使用 View 模型和数据绑定(bind)的好处感兴趣,您应该阅读 MVVM:https://msdn.microsoft.com/en-us/magazine/dd419663.aspx .
关于c# - XAML 数据绑定(bind)清晰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43218103/
我正在尝试将一个节点添加到列表的末尾,这就是我想到的。我只是想知道我是否设置 tail=head 是否与 tail=add 相同?或者如果我有 tail=head.next 如果它与 tail=add
我有一个 android 应用程序,我在其中使用 android 相机拍照。经过一番努力后,我设法在我想要的地方和我想要的方式拍摄照片。最后的问题是质量图片。 当我的预览开始时,一切看起来都非常清晰和
即使表中还没有行,我也试图占用所有垂直空间。 clr-datagrid 是否可以自定义?似乎我必须手动覆盖 .datagrid-host 的 flexbox 属性和 .datagrid-overlay
我正在尝试让 VMware Clarity UI sidenav 正常工作,并且会喜欢一个可靠的例子。我正在使用 clear-seed 项目,并且在 app.component.html 内部我有他们
因此,我有一个无法更改的 SQL 架构,并且我正在尝试使用 GAS 脚本将数据拉出并放入 Google 表格中。它返回 0 个结果。如果我删除最后一个 JOIN 和最后一行 SELECT 列,我会得到
想看看是否有人可以帮我解决这个问题?从 XAML 元素到 ViewModel(ex:1) 中的值,或者从 CodeBehind(ex:2) 返回到元素,如 HostName.Text,DataBind
前言 需求源自项目中的一些应用,比如相册功能,通常用户上传相片后我们都会针对该相片再生成一张缩略图,用于其它页面上的列表显示。随便看一下,大部分网站基本都是将原图等比缩放来生成缩略图。但完美主义者
我有一个基本的清晰 Angular 模板,可以在 sidenav 中进行搜索。当我在移动设备上单击 sidenav 中的查找按钮时,sidenav 不会消失。如何使用 Angular 关闭 siden
我正在尝试跟踪对树节点数据源所做的更改。每个节点都有一个 selected 属性,它反射(reflect)节点选择状态,每次选择一个节点时,我需要将选择发送到另一个组件,该组件将根据该选择构建另一棵树
右边距的 css 规则似乎在具有清晰度设计系统的 Angular 8 中无效。请参阅下面的详细信息。 我有一个带有清晰设计系统的 Angular 8 元素。我已经为它设置了标题和垂直导航,如下面的屏幕
我是一名优秀的程序员,十分优秀!