Xamarin Forms MVVM实现效果说明
实体对象定义Model2 和Model均可 实现响应效果
public class BaseModel : INotifyPropertyChanged
{
private bool _selected;
public bool Selected
{
get { return _selected; } set
{
if (Selected != value)
{
_selected = value;
OnPropertyChanged();
OnPropertyChanged("StatusFormat");
}
}
} public string StatusFormat
{
get
{
return Selected ? "选中了" : "没选中";
}
} public void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
} public event PropertyChangedEventHandler PropertyChanged;
} public class BaseModel2 : BindableObject
{
public static readonly BindableProperty SelectedProperty =
BindableProperty.Create("Selected",
typeof(bool),
typeof(bool),
false );
public bool Selected
{
get
{
return (bool)this.GetValue(SelectedProperty);
}
set
{
if (Selected != value)
{
this.SetValue(SelectedProperty, value);
//通知下另外的依赖属性跟着变
OnPropertyChanged("StatusFormat");
}
}
} public string StatusFormat
{
get
{
return Selected ? "选中了" : "没选中";
}
}
}
public partial class MainPage : ContentPage
{
/// <summary>
/// 我实现了2个mvvm方式 BaseModel 和 BaseModel2 都可以实现响应
/// </summary>
private ObservableCollection<BaseModel2> Models;
public int Tick { get; set; }
public MainPage()
{
InitializeComponent();
Models = new ObservableCollection<BaseModel2>();
lst.ItemsSource = Models;
this.BindingContext = this;
} private void Button_Clicked(object sender, EventArgs e)
{
Tick++;
this.OnPropertyChanged("Tick");
if (Models.Count==)
{
Models.Add(new BaseModel2 { Selected = false });
Models.Add(new BaseModel2 { Selected = true });
Models.Add(new BaseModel2 { Selected = true });
Models.Add(new BaseModel2 { Selected = false });
} Models[new Random().Next(Models.Count)].Selected = !Models[new Random().Next(Models.Count)].Selected; }
}
<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:App5Mvvm"
x:Class="App5Mvvm.MainPage"> <StackLayout>
<!-- Place new controls here -->
<Label Text="Xamarin MVVM哪些事"
HorizontalOptions="Center"
VerticalOptions="CenterAndExpand" />
<Label Text="{Binding Tick, StringFormat='{0}次点击'}}"></Label>
<Button Clicked="Button_Clicked" Text="点我点我"></Button>
<ListView x:Name="lst">
<ListView.ItemTemplate>
<DataTemplate >
<ViewCell>
<StackLayout Orientation="Horizontal">
<BoxView WidthRequest="" Color="Red" IsVisible="{Binding Selected}"></BoxView>
<Label Text="{Binding StatusFormat}"></Label>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout> </ContentPage>
Xamarin Forms MVVM实现效果说明的更多相关文章
- Xamarin Forms 进度条控件
本文翻译:http://xamlnative.com/2016/04/14/xamarin-forms-a-simple-circular-progress-control/ 里面都是胡说的,如果看不 ...
- Xamarin.Forms 自定义控件(呈现器和效果)
Xamarin.Forms 使用目标平台的本机控件呈现用户界面,从而让 Xamarin.Forms 应用程序为每个平台保留了相应的界面外观.凭借效果,无需进行自定义呈现器实现,即可自定义每个平台上的本 ...
- 从零开始学Xamarin.Forms(一) 概述
原文:从零开始学Xamarin.Forms(一) 概述 Xamarin 读 "ˈzæmərin",是一个基于开源项目mono的能够使用C#开发的收费的跨平台(iOS.And ...
- Xamarin.Forms 开发资源集合(复制)
复制:https://www.cnblogs.com/mschen/p/10199997.html 收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 S ...
- Xamarin.Forms 开发资源集合
收集整理了下 Xamarin.Forms 的学习参考资料,分享给大家,稍后会不断补充: UI样式 Snppts: Xamarin Forms UI Snippets. Prebuilt Templat ...
- 使用MvvmCross框架实现Xamarin.Forms的汉堡菜单布局
注:本文是英文写的,偷懒自动翻译过来了,原文地址:Implementing MasterDetail layout in Xamarin.Forms by MvvmCross 欢迎大家关注我的公众号: ...
- 从零開始学Xamarin.Forms(一) 概述
Xamarin 读 "ˈzæmərin",是一个基于开源项目mono的可以使用C#开发的收费的跨平台(iOS.Android.Windows Phone.Mac)解决方式. ...
- Xamarin.Forms之XAML
官网参考 XAML基础知识 XAML(eXtensible Application Markup Language)可扩展应用程序标记语言,允许开发者在Xamarin.Forms应用中采用标记而不是代 ...
- Xamarin.Forms 入门
介绍 Xamarin.Forms是一个开源UI框架,Xamarin.Forms允许开发人员从单个共享代码库构建Android,iOS和Windows应用程序. Xamarin.Forms允许开发人员使 ...
随机推荐
- bind函数(c++11)
1.概念 1)c++11使用bind()函数可以向函数传递参数,一般调用形式为: 返回的newCallable是一个可调用的对象,callable是需要传参的函数,arg_list是参数列表 2)bi ...
- PHP函数gmstrftime()将秒数转换成天时分秒
http://yangjunwei.com/a/930.html PHP函数gmstrftime()将秒数转换成天时分秒 一个应用场景需要用到倒计时的时分秒,比如新浪微博授权有效期剩余: 7天16 ...
- python的6种基本数据类型--集合
特征 1.确定性(元素必须可hash) 2.互异性(去重) 3.无序性(集合中的元素没有顺序,先后之分) >>> s = {1,1,1,2,2,3,4,5,6,7} # 创建 > ...
- IntelliJ IDEA 2017版 编译器使用学习笔记(九)(图文详尽版);IDE使用的有趣的插件;IDE代码统计器;Mybatis插件
一.代码统计器,按照名字搜索即可,在file===setting------plugin 使用右键项目:点击自动统计 二.json转实体类 三.自动找寻bug插件 四.Remind me工具 五.检测 ...
- Attr类型
Attr表示元素的特性,在所有浏览器中,都可以访问Attr类型的构造函数和原型. attr特性存在于元素的attributes属性中的节点 nodeType 2 nodeName 特性的名称 node ...
- Vsftpd完全攻略(三)基于系统用户支持ftp上传 访问和vsftp安全设置
原文链接:http://viong.blog.51cto.com/844766/261342 1.关闭匿名用户登录 ftp支持匿名登录是不安全,所以要禁止匿名ftp登录 在/etc/vsftpd/vs ...
- doc.getElementById(id); null
Open Declaration Element org.w3c.dom.Document.getElementById(String elementId) Returns the Element t ...
- hdu 1695 GCD 【莫比乌斯函数】
题目大意:给你 a , b , c , d , k 五个值 (题目说明了 你可以认为 a=c=1) x 属于 [1,b] ,y属于[1,d] 让你求有多少对这样的 (x,y)满足gcd(x,y)= ...
- TF-IDF模型的概率解释
信息检索概述 信息检索是当前应用十分广泛的一种技术,论文检索.搜索引擎都属于信息检索的范畴.通常,人们把信息检索问题抽象为:在文档集合D上,对于由关键词w[1] … w[k]组成的查询串q,返回一个按 ...
- DevExpress控件cxGrid实现多列模糊匹配输入的完美解决方案
本方案不需要修改控件源码,是完美解决cxgrid或TcxDBExtLookupComboBox支持多列模糊匹配快速输入的最佳方案!! 转自https://blog.csdn.net/qq5643020 ...