Windows Phone 7 MVVM模式通讯方式之实现Binding Data

MVVM模式的View与ViewModel的三大通讯方式:Binding Data(实现数据的传递)、Command(实现操作的调用)和Attached Behavior(实现控件加载过程中的操作)。
下面通过一个实例实现MVVM模式的Binding Data通讯
1、创建Model层
Food.cs
namespace BindingDataDemo.Model
{
public class Food
{
public string Name
{
get;
set;
}
public string Description
{
get;
set;
}
public string IconUri
{
get;
set;
}
public string Type
{
get;
set;
}
}
}
2.创建ViewModel层
FoodViewModel.cs
using System;
using System.ComponentModel;
using BindingDataDemo.Model;
using System.Collections.ObjectModel;
namespace BindingDataDemo.ViewModel
{
public class FoodViewModel : INotifyPropertyChanged
{
private ObservableCollection<Food> _allFood;
public ObservableCollection<Food> AllFood
{
get
{
if (_allFood == null)
_allFood = new ObservableCollection<Food>();
return _allFood;
}
set
{
if (_allFood != value)
{
_allFood = value;
NotifyPropertyChanged("AllFood");
}
}
}
public FoodViewModel()
{
try
{
Food item0 = new Food() { Name = "西红柿", IconUri = "Images/Tomato.png", Type = "Healthy" ,Description="西红柿的味道不错。" };
Food item1 = new Food() { Name = "茄子", IconUri = "Images/Beer.png", Type = "NotDetermined", Description = "不知道这个是否好吃。" };
Food item2 = new Food() { Name = "火腿", IconUri = "Images/fries.png", Type = "Unhealthy", Description = "这是不健康的食品。" };
Food item3 = new Food() { Name = "三明治", IconUri = "Images/Hamburger.png", Type = "Unhealthy" ,Description="肯德基的好吃?" };
Food item4 = new Food() { Name = "冰激凌", IconUri = "Images/icecream.png", Type = "Healthy", Description = "给小朋友吃的。" };
Food item5 = new Food() { Name = "Pizza", IconUri = "Images/Pizza.png", Type = "Unhealthy" ,Description="这个非常不错。" };
Food item6 = new Food() { Name = "辣椒", IconUri = "Images/Pepper.png", Type = "Healthy", Description = "我不喜欢吃这东西。" };
AllFood.Add(item0);
AllFood.Add(item1);
AllFood.Add(item2);
AllFood.Add(item3);
AllFood.Add(item4);
AllFood.Add(item5);
AllFood.Add(item6);
}
catch ( Exception e )
{
System.Windows.MessageBox.Show( "Exception: " + e.Message );
}
}
// 定义PropertyChanged 事件
public event PropertyChangedEventHandler PropertyChanged;
public void NotifyPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
}
3、创建View层
MainPage.xaml
<phone:PhoneApplicationPage
x:Class="BindingDataDemo.MainPage"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:my="clr-namespace:BindingDataDemo.ViewModel"
mc:Ignorable="d" d:DesignWidth="480" d:DesignHeight="768"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
shell:SystemTray.IsVisible="True">
<!--添加ViewModel层的FoodViewModel类为资源-->
<phone:PhoneApplicationPage.Resources>
<my:FoodViewModel x:Key="food" />
</phone:PhoneApplicationPage.Resources>
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
<TextBlock x:Name="ApplicationTitle" Text="MY APPLICATION" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock x:Name="PageTitle" Text="数据绑定" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--在Grid控件中将上面定义好的FoodViewModel类资源赋值给DataContent属性,表示Grid控件内使用FoodViewModel类作为上下文数据-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0" DataContext="{StaticResource food }">
<!--在ListBox控件中绑定FoodViewModel类的AllFood属性,AllFood是ObservableCollection<Food>类型-->
<ListBox x:Name="listBox" HorizontalContentAlignment="Stretch" ItemsSource="{Binding AllFood}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Background="Gray" Width="450" Margin="10">
<!--绑定Food类的IconUri属性-->
<Image Source="{Binding IconUri}" Stretch="None"/>
<!--绑定Food类的Name属性-->
<TextBlock Text="{Binding Name}" FontSize="40" Width="150"/>
<!--绑定Food类的Description属性-->
<TextBlock Text="{Binding Description}" FontSize="20" Width="280"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Grid>
</phone:PhoneApplicationPage>
OK!!!!!!!!!!!!!!!!!!!!!!!
备注:实现绑定数据的方法有很多种,原理都大同小异。
下载前必看:https://pan.quark.cn/s/744f26e0d658 标题“安良H3D 多功能限时继电器.pdf”中的知识点涉及继电器的技术细节和功能特性。 继电器是一种电控制装置,广泛应用于电子、电力、自动化及通信系统中,其主要功能是在输入电路中由小功率控制大功率电路的一种自动开关。 限时继电器则是具备时间控制功能的继电器,可以在设定时间后延迟动作或是在设定时间内动作,从而实现时间控制。 从描述和标签“安良H3D 多功能限时继电器pdf, 安良H3D 多功能限时继电器”中,可以推测这份PDF文件是对特定型号H3D继电器的技术说明文档,它强调了该继电器的多功能特性,意味着该设备不仅仅是简单的定时器,可能还集成了多种功能,例如过载保护、故障报警、远程控制等。 标签“综合资料”则表明这是一份综合性的技术资料,为使用者提供全面的继电器信息。 关于文档中部分内容的分析,虽然文档信息不是完全准确,但可以推断其描述了该继电器的相关技术参数、功能应用和操作说明。 以下是对这部分内容的详细解读:继电器名称“H3D-M”表明这是安良公司生产的H3D型号系列中的M型继电器。 文档中提到的“使用了H3D-M继电器”可能说明该文档提供了该型号继电器的具体应用案例或示例。 接着,“价值了H3D-M继电器”可能是指H3D-M继电器被使用或实现的功能。 从上下文看,这些功能包括定时控制、安全保护、远程通信等。 在安全保护方面,继电器可实现过载保护,防止系统过载引发的故障。 远程通信则意味着该继电器可能具备网络接口,能通过网络接受控制指令或发送状态信息。 文档中还提到“实现了H3D-M继电器的多种功能”,表明继电器集成了多项功能,如可以进行定时控制、保护和信号采集等多种操作。 这说明继电器不仅具有基本的...
连接器实例分割数据集 一、基础信息 • 数据集名称:连接器实例分割数据集 • 图片数量: 训练集:10,884张图片 验证集:588张图片 测试集:284张图片 总计:11,756张图片 • 训练集:10,884张图片 • 验证集:588张图片 • 测试集:284张图片 • 总计:11,756张图片 • 分类类别: 连接器(connector):工业或电子领域中常见的连接部件,用于电路或机械连接。 • 连接器(connector):工业或电子领域中常见的连接部件,用于电路或机械连接。 • 标注格式:YOLO格式,包含实例分割的多边形标注,适用于实例分割任务。 • 数据格式:图像数据,来源于实际场景采集,适用于计算机视觉模型训练。 二、适用场景 • 工业自动化检测:用于制造过程中自动识别和分割连接器部件,实现质量控制和故障诊断。 • 机器人视觉引导:集成到机器人系统中,帮助机器人精准定位和操作连接器,提升自动化效率。 • 电子元件分析:在电子行业中对连接器进行实例分割,支持元件计数、分类或缺陷检测。 • 学术研究与算法开发:适用于计算机视觉领域的研究,特别是实例分割模型的优化与验证。 三、数据集优势 • 精准实例标注:每个连接器实例都经过精细的多边形标注,确保分割边界准确,提升模型识别精度。 • 大规模数据支持:训练集包含超过10,000张图像,提供丰富的样本多样性,增强模型的泛化能力。 • 任务专用设计:专注于连接器实例分割,数据场景真实,直接适用于工业视觉应用。 • 格式兼容性强:YOLO标注格式兼容主流深度学习框架(如YOLO系列、PyTorch等),便于快速集成和实验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值