0521 binding 事件聚合器

博客介绍了Prism框架中使用IEventAggregator事件聚合器实现ViewModel之间通讯的方法。还提及ListView的Style问题,指出GridViewColumn用DisplayMemberBinding使CellTemplate失效及解决办法。此外,说明了DataGrid中模板列排序需添加属性及相关模板设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<RichTextBox Name="rb" Margin="0,0,0,00" Grid.Row="1"  ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Auto"></RichTextBox>

<Paragraph>

<Run Text={Binding}/>

</Paragraph>

WPF Step By Step 系列

https://www.cnblogs.com/joean/p/4787730.html

Prism 框架中使用IEventAggregator事件聚合器简单实现ViewModel之间的通讯

https://blog.csdn.net/yuligai100/article/details/74911805

 

http://www.cnblogs.com/scy251147/p/3407983.html

 

https://www.bbsmax.com/A/l1dyPjDn5e/

<DataGrid.Columns>
    <DataGridTextColumn Header="检测项目" Binding="{Binding ItemName}" Width="*" />
    <DataGridTemplateColumn Header="详细"   Width="80" >
        <DataGridTemplateColumn.CellTemplate>
            <DataTemplate>
                <Button  VerticalAlignment="Stretch"  Style="{StaticResource NewDialogBtStyleG}" Height="{Binding ElementName=GridTest,Path=RowHeight}" Click="ItemClick" ></Button>
            </DataTemplate>
        </DataGridTemplateColumn.CellTemplate>
    </DataGridTemplateColumn>
</DataGrid.Columns>

 

<DataGridTemplateColumn Header="{DynamicResource __BACnetAddin__Label__Operator}" MinWidth="60">
                            <DataGridTemplateColumn.CellStyle>
                                <Style TargetType="DataGridCell">
                                    <Setter Property="Template">
                                        <Setter.Value>
                                            <ControlTemplate>
                                                <ComboBox SelectedValue="{Binding Path=ExpressionOperator, UpdateSourceTrigger=PropertyChanged}"
                                                          ItemsSource="{Binding Source={StaticResource EqualOnlyOperatorItemsSourceKey}}"/>
                                            </ControlTemplate>
                                        </Setter.Value>
                                    </Setter>
                                    <Style.Triggers>
                                        <DataTrigger Binding="{Binding Path=PropertyName}" Value="PresentValue">
                                            <Setter Property="Template">
                                                <Setter.Value>
                                                    <ControlTemplate>
                                                        <ComboBox SelectedValue="{Binding Path=ExpressionOperator, UpdateSourceTrigger=PropertyChanged}"
                                                                  ItemsSource="{Binding Source={StaticResource OperatorItemsSourceKey}}"/>
                                                    </ControlTemplate>
                                                </Setter.Value>
                                            </Setter>
                                        </DataTrigger>
                                    </Style.Triggers>
                                </Style>
                            </DataGridTemplateColumn.CellStyle>
                        </DataGridTemplateColumn>

 

 

<?xml version="1.0" encoding="UTF-8"?> 最近做一个ListView的Style时,发现一个问题, 就是我的GridView的GridViewColumn的CellTemplate无论是用StaticResource还是DynamicResource,都是没有效果。

原因:GridViewColumn用了DisplayMemberBinding 使得CellTemplate失效。 

解决办法: 去掉DisplayMemberBinding, 在CellTemplate的模板中指定Path路径。 比如:

                                <DataTemplate x:Key="GridViewHeaderTemplate1">
                                                                <StackPanel>
                                                                                <TextBlock  Text="{Binding Mode=OneWay}"/>
                                                                                <TextBox  TextWrapping="Wrap" Text="" MinWidth="25"/>
                                                                </StackPanel>
                                                </DataTemplate>
                                                
                                                <DataTemplate x:Key="StatusDataTemplate">
                                                                <CheckBox IsChecked="{Binding Status}"></CheckBox>
                                                </DataTemplate>

<GridViewColumn HeaderTemplate="{StaticResource GridViewHeaderTemplate1}" CellTemplate="{StaticResource StatusDataTemplate}"  Header="Status" />

如果你不想用CellTemplate指定Binding的path, 可以通过<GridViewColumn HeaderTemplate="{StaticResource GridViewHeaderTemplate1}" DisplayMemberBinding="{Binding Status}"  Header="Status" />
--------------------- 
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding xxx}"/>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
                </DataGridTemplateColumn>

 

在DataGrid中使用模板列时,默认功能中对点击列标题是不对列值进行排序的,要排序就需要添加以下两个属性:

  1、CanUserSort="True"
  2、SortMemberPath="Area" //此处SortMemberPath属性的值是作为排序依据的数据成员
<DataGridTemplateColumn CanUserSort="True" SortMemberPath="Area" Header="产地"  MinWidth="80">
                    <DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=Area}" VerticalAlignment="Center" >
                            </TextBlock>
                        </DataTemplate>
                    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

 

DataGridTemplateColumn类型可让你通过指定要显示和编辑值时使用的单元格模板创建你自己的列类型。 若要指定用于显示未处于编辑模式的单元格内容的模板,请设置CellTemplate属性。 若要指定用于显示编辑模式下的单元格内容的模板,请设置CellEditingTemplate属性。 有关模板的详细信息,请参阅数据模板化概述样式和模板化

https://docs.microsoft.com/zh-cn/dotnet/api/system.windows.controls.datagridtemplatecolumn?view=netframework-4.8

 

CanUserSort

获取或设置一个值,该值指示用户能否通过单击列标题对列进行排序。

(Inherited from DataGridColumn)
CellTemplate

获取或设置要用于显示非编辑模式下的单元格内容的模板。

SortMemberPath

获取或设置属性名称或用句点分隔的属性名称层次结构,它指示作为排序依据的成员。

(Inherited from DataGridColumn)

http://www.cnblogs.com/oneivan/archive/2012/11/16/2772885.html

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值