更新时Silverlight dataform MVVM命令绑定
我是MVVM和Silverlight的新手,我只是想弄清楚一个简单的场景 我使用的是MVVM Light工具包和Silverlight 3.0,没有Expression Blend 我有一个DataGrid和一个DataForm绑定到ViewModel中的一个可观察集合。在对DataForm控件中的数据进行更改后,我希望绑定到我的更新时Silverlight dataform MVVM命令绑定,silverlight,silverlight-3.0,mvvm,mvvm-light,dataform,Silverlight,Silverlight 3.0,Mvvm,Mvvm Light,Dataform,我是MVVM和Silverlight的新手,我只是想弄清楚一个简单的场景 我使用的是MVVM Light工具包和Silverlight 3.0,没有Expression Blend 我有一个DataGrid和一个DataForm绑定到ViewModel中的一个可观察集合。在对DataForm控件中的数据进行更改后,我希望绑定到我的RelayCommand Save()属性,并且在不使用视图中的代码的情况下完成此操作 数据表单没有使用MVVM Light用于普通按钮单击命令绑定的cmd:Butto
RelayCommand Save()
属性,并且在不使用视图中的代码的情况下完成此操作
数据表单没有使用MVVM Light用于普通按钮单击命令绑定的cmd:ButtonBaseExtensions.Command
,因此我不确定如何将控件绑定到我的ViewModel
感谢您的帮助 我在发帖后不久就明白了。算了吧 使用MVVM Light Toolkit时,您可以使用
EventToCommand
功能绑定到事件
我的Xaml如下所示:
<UserControl x:Class="CountyBusinessDirectory.UI.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:dataFormToolkit="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data.DataForm.Toolkit"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns:cmd="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight"
xmlns:cmdextras="clr-namespace:GalaSoft.MvvmLight.Command;assembly=GalaSoft.MvvmLight.Extras"
DataContext="{Binding BusinessesViewModel, Source={StaticResource Locator}}">
<Grid x:Name="LayoutRoot" ShowGridLines="False">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="2*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<data:DataGrid x:Name="dgAllBusinesses" CanUserSortColumns="True"
IsReadOnly="True" AutoGenerateColumns="True"
ItemsSource="{Binding Businesses}"
Grid.Column="0">
</data:DataGrid>
<ScrollViewer x:Name="svScroll" Grid.Column="1" >
<dataFormToolkit:DataForm x:Name="dfDetails"
ItemsSource="{Binding Businesses}"
AutoGenerateFields="True"
CommitButtonContent="Save"
CommandButtonsVisibility="Edit, Navigation, Commit, Cancel" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="EditEnded">
<cmdextras:EventToCommand Command="{Binding SaveBusiness}" />
</i:EventTrigger>
</i:Interaction.Triggers>
</dataFormToolkit:DataForm>
</ScrollViewer>
</Grid>
我的ViewModel如下所示(例如,在ViewModel中使用支持直接silverlight的WCF服务,通常会将其拉入接口以解耦):
//使用为简洁而编写的语句
命名空间MyProject.ViewModels
{
公共类BusinessViewModel:ViewModelBase
{
私有页面集合视图(u业务);;
DALServiceClient_代理;
公共关系公共储蓄业务
{get;私有集;}
公共页面集合视图业务
{
得到
{
退货业务;
}
设置
{
如果(_业务!=价值)
{
_企业=价值;
基础。提高资产变更(“业务”);
}
}
}
公共业务视图模型()
{
_proxy=new DALServiceClient();//数据访问层WCF服务
_proxy.GetBusinessesCompleted+=新事件处理程序(\u proxy\u GetBusinessesCompleted);
_proxy.getBusinessAsync();
SaveBusiness=newrelaycommand(()=>SaveBusinessToDB());
}
私有void SaveBusinessToDB()
{
业务总线=Business.CurrentItem作为业务;
_proxy.updatebusinessasync(总线);
}
void\u proxy\u GetBusinessesCompleted(对象发送方,getbusinessescompletedeventarge)
{
如果(例如,结果!=null)
{
业务=新页面集合视图(例如结果);
}
}
}
}
你的帖子很有帮助。谢谢请把它标为答案。
//using statements ommitted for brevity
namespace MyProject.ViewModels
{
public class BusinessesViewModel : ViewModelBase
{
private PagedCollectionView _businesses;
DALServiceClient _proxy;
public RelayCommand SaveBusiness
{ get; private set; }
public PagedCollectionView Businesses
{
get
{
return _businesses;
}
set
{
if (_businesses != value)
{
_businesses = value;
base.RaisePropertyChanged("Businesses");
}
}
}
public BusinessesViewModel()
{
_proxy = new DALServiceClient(); //Data Access Layer WCF Service
_proxy.GetBusinessesCompleted += new EventHandler<GetBusinessesCompletedEventArgs>(_proxy_GetBusinessesCompleted);
_proxy.GetBusinessesAsync();
SaveBusiness = new RelayCommand(() => SaveBusinessToDB());
}
private void SaveBusinessToDB()
{
Business bus = Businesses.CurrentItem as Business;
_proxy.UpdateBusinessesAsync(bus);
}
void _proxy_GetBusinessesCompleted(object sender, GetBusinessesCompletedEventArgs e)
{
if (e.Result != null)
{
Businesses = new PagedCollectionView(e.Result);
}
}
}
}