惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

L
LINUX DO - 热门话题
Stack Overflow Blog
Stack Overflow Blog
B
Blog
WordPress大学
WordPress大学
Project Zero
Project Zero
P
Palo Alto Networks Blog
阮一峰的网络日志
阮一峰的网络日志
博客园 - 司徒正美
有赞技术团队
有赞技术团队
S
SegmentFault 最新的问题
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
小众软件
小众软件
T
Tailwind CSS Blog
Forbes - Security
Forbes - Security
F
Full Disclosure
SecWiki News
SecWiki News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
Hacker News: Ask HN
Hacker News: Ask HN
C
Check Point Blog
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
F
Fortinet All Blogs
Cisco Talos Blog
Cisco Talos Blog
G
Google Developers Blog
J
Java Code Geeks
Google DeepMind News
Google DeepMind News
人人都是产品经理
人人都是产品经理
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Recorded Future
Recorded Future
O
OpenAI News
Spread Privacy
Spread Privacy
MongoDB | Blog
MongoDB | Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
C
Cybersecurity and Infrastructure Security Agency CISA
S
Securelist
V
Vulnerabilities – Threatpost
Y
Y Combinator Blog
IT之家
IT之家
U
Unit 42
腾讯CDC
S
Security Affairs
C
Cisco Blogs
Schneier on Security
Schneier on Security
The Last Watchdog
The Last Watchdog
B
Blog RSS Feed
宝玉的分享
宝玉的分享
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
S
Security @ Cisco Blogs
Cyberwarzone
Cyberwarzone
T
The Blog of Author Tim Ferriss

博客园 - 王育东

Redis + Shiro + FastJson@Cacheable无法写入缓存 canal-client无法获取数据 mysql5.7设置默认编码 Angular No name was provided for external module 'XXX' in output.globals 错误 Angular cli 发布自定义组件 Windows Message ID 常量列表大全 C#中Thread与ThreadPool的比较 HTML元素隐藏和显示 IM服务器架构实现 TCP打洞技术 C# UDP打洞 Entity Framework 4 CodeFirst EFProviderWrapperToolKit 使用 COM ActiveX C++ Builder 十分经典的批处理教程 ADO.NET Entity Framework 如何输出日志到 log4net (EF, Log4net) Silverlight 发布测试 WCF发布到IIS7问题的解决方案 慢慢的才知道 Javascript在页面加载时的执行顺序 - 王育东 - 博客园
MVVM-Light模式,在dataGrid的模板下,绑定事件不触发的原因已经服务端排序的实现
王育东 · 2012-04-11 · via 博客园 - 王育东

如果按以下绑定,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: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: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); 

        

     }