如果以下绑定,DataGrid 模板里的Radio 的绑定事件将不会被触发:
<sdk:DataGrid Grid.Column="0" x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False" Width="auto" Height="auto" HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding NoticeCollection,Mode=TwoWay}" IsTabStop="False" Style="{StaticResource DataGridStyle}" ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}" RowStyle="{StaticResource DataGridRowStyle}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:CallMethodAction MethodName="DatagridMouseLeftButtonDown" TargetObject="{Binding}">
</ei:CallMethodAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="选项" Width="0.1*">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,7,0,0">
<RadioButton GroupName="sel" Command="{Binding MessageSelected}" CommandParameter="{Binding Id,Mode=OneWay}" ></RadioButton>
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="标题" Width="0.3*" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,7,0,0">
<HyperlinkButton Content="{Binding Title,Mode=OneWay}" Style="{StaticResource PageHyperlinkButtonStyle}" Command="{Binding Source={StaticResource Locator},Path=NoticeListViewModelStatic.ViewMsgCommand}" CommandParameter="{Binding Id,Mode=OneWay}" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Header="信息内容" Width="0.4*" Binding="{Binding Content,Mode=OneWay}"></sdk:DataGridTextColumn>
<!--<sdk:DataGridTextColumn Header="创建时间" Width="0.2*" Binding="{Binding CreateTime,Mode=OneWay,StringFormat='yyy-MM-dd HH:mm'}"></sdk:DataGridTextColumn>-->
<sdk:DataGridTemplateColumn Header="创建时间" Width="0.2*" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,7,0,0">
<TextBlock Text="{Binding CreateTime,Mode=OneWay,StringFormat='yyy-MM-dd HH:mm'}" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
原因是
DataGrid.Columns 不是依赖属性,所有绑定的dataContext将会丢失,所有可以用element-to-element的数据绑定来解决此问题
<sdk:DataGrid Grid.Column="0" x:Name="dataGrid" IsReadOnly="True" AutoGenerateColumns="False" Width="auto" Height="auto" HorizontalAlignment="Left" VerticalAlignment="Top"
ItemsSource="{Binding NoticeCollection,Mode=TwoWay}" IsTabStop="False" Style="{StaticResource DataGridStyle}" ColumnHeaderStyle="{StaticResource DataGridColumnHeaderStyle}" RowStyle="{StaticResource DataGridRowStyle}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:CallMethodAction MethodName="DatagridMouseLeftButtonDown" TargetObject="{Binding}">
</ei:CallMethodAction>
</i:EventTrigger>
</i:Interaction.Triggers>
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn Header="选项" Width="0.1*">
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,7,0,0">
<RadioButton GroupName="sel" Command="{Binding Source={StaticResource Locator},Path=NoticeListViewModelStatic.MessageSelected}" CommandParameter="{Binding Id,Mode=OneWay}" ></RadioButton>
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn Header="标题" Width="0.3*" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Left" VerticalAlignment="Top" Margin="0,7,0,0">
<HyperlinkButton Content="{Binding Title,Mode=OneWay}" Style="{StaticResource PageHyperlinkButtonStyle}" Command="{Binding Source={StaticResource Locator},Path=NoticeListViewModelStatic.ViewMsgCommand}" CommandParameter="{Binding Id,Mode=OneWay}" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTextColumn Header="信息内容" Width="0.4*" Binding="{Binding Content,Mode=OneWay}"></sdk:DataGridTextColumn>
<!--<sdk:DataGridTextColumn Header="创建时间" Width="0.2*" Binding="{Binding CreateTime,Mode=OneWay,StringFormat='yyy-MM-dd HH:mm'}"></sdk:DataGridTextColumn>-->
<sdk:DataGridTemplateColumn Header="创建时间" Width="0.2*" >
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<StackPanel HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,7,0,0">
<TextBlock Text="{Binding CreateTime,Mode=OneWay,StringFormat='yyy-MM-dd HH:mm'}" />
</StackPanel>
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
顺便提一下,silverlight的dataGrid
在MVVM模式下的排序事件实现:
在View里声明出发前:
<i:Interaction.Triggers>
<i:EventTrigger EventName="MouseLeftButtonDown">
<ei:CallMethodAction MethodName="DatagridMouseLeftButtonDown" TargetObject="{Binding}">
</ei:CallMethodAction>
</i:EventTrigger>
</i:Interaction.Triggers>
在ViewModel里实现方法:
public void DatagridMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var u =
from element in VisualTreeHelper.FindElementsInHostCoordinates(e.GetPosition(null), sender as UIElement)
where element is DataGridColumnHeader
select element;
if (u.Count() == 1)
{
e.Handled = true;
var columnTag = ConvertColumnName(((DataGridColumnHeader)u.Single()).Content.ToString());
if (string.IsNullOrEmpty(columnTag) || columnTag == "Serial" || columnTag == "Do")
return;
Ascning = (OrderColumn == columnTag) && !Ascning;
OrderColumn = columnTag;
PagerInfo p = new PagerInfo();
p.PageSize = this._pagesize;
p.PageIndex = 1;
this.PagerContext.MoveToFirstPage();
SortType = Ascning ? "ASC" : "DESC";
searchData(p, OrderColumn, SortType);
}
}
分享到:
相关推荐
MvvmLight-Sample-master C# wpf架构源代码
利用微软的MVVM开发模式,方便高效的使用DataGrid控件实现功能。
mvvm-设计模式框架,Android MVVM framework write in kotlin, develop Android has never been so fun.
这篇文章我们将实现把命令绑定到按钮上,在XAML中的Button之类的都会有个Command属性可以让我们来绑定命令使用。 首先我们要实现的目标是,在界面中可以点击按钮添加数据,但是最多能添加5条数据,最少保证有1条...
WPF 纯MVVM模式 任意事件绑定 获取EventArgs 完美取代原生事件+=模式 只需要引用System.Windows.Interactivity
一个简单的WPF程序
使用MVVM模式对WPF中的DataGrid控件动态添加列,并实现了编辑模式。
1、wpf mvvm 实现数据绑定 2、wpf mvvm 实现事件绑定 3、sql连接使用的是ado.net 实体数据模型,如需调试、重新添加ado实体模型即可
WPF之MVVM中DataGrid中嵌入Combox,改变Combox可回传至绑定的实体
WPF实现MVVM的事件绑定的两种非常规方式。 参考博客:https://blog.csdn.net/IQQQQU/article/details/86530285 1、重写InvokeCommandAction来扩充返回的参数 2、运用Behavior来实现事件,可以通过两种方式来获取...
MvvmLight-NuGet使用简明教程
rx-mvvm-android, 使用RxJava和新的Android数据绑定实现MVVM的方法 RxMVVM使用RxJava和新的Android数据绑定实现MVVM的方法摘要使用 将Android框架与一个干净的架构( ) 分离到我的领域逻辑中。使用数据绑定查看视图...
wpf闹钟 设计模式 Mvvm模式 Mvvmlight
MVVM-demo-Swift版本,详细请移步: https://github.com/beijiahiddink/MVVM-Demo-Swift
参考文章:http://www.wxzzz.com/973.html 这篇文章主要是介绍如何使用MVVMLight来绑定数据到界面中(View),以此来了解MVVMLight的一些基础的类的用法。 文章底部会提供本示例的源码下载。 MVVMLight绑定数据示例
WPF应用程序 .net4.5框架 +MvvmLight +Sqlite 实现数据增加删除即时更新到datagrid,非常实用的入门级小数据操作应用程序,源码上传可以参考使用
为原书的修订后的代码集合,按章节归类对应的代码,适合初学者以及有一定基础的开发人员学习了解,结合原书可以更好的理解WPF开发以及MVVM的原理和设计的选择原因和决策的依据。
mvvm-in-delphi.zip
WPF MVVM DataGrid分页案例 运用数据绑定 Command 可作为MVVM学习使用
MVVMLight(Mvvm.Light官方Demo),里面包含了MvvMlight的各种用法,非常的实用,对于新手入门非常有帮助