WPF中ItemsSource改变,DataGrid中不更新

需要将ItemsSource先赋值为null,而后再赋值为新的值。

例如:


gridBeamInfo.ItemsSource = null;
if (beamInfoList.Count==0)
{
beamInfoList = new List<BeamInfo>();
beamInfoList.Add(new BeamInfo("未搜索到...", "无"));
}
gridBeamInfo.ItemsSource = beamInfoList;

WPF中DataGrid高亮搜索符合项

不应遍历DataGrid的cell来搜索符合项,在设计 UI 控件时,开发者保证它与数据源(例如实现了 ObservableCollection 模板的集合)保持双向绑定(不但绑定内容记录,而且绑定集合的变化)。但是并不提供你去遍历控件的 Items 的机制! 在桌面的控件中,由于大量重复使用控件,因此控件占用的内存是个大问题。所以这类数据绑定控件通常会复用 Item 对应的控件。例如 DataGrid 可能只保持30行子控件,当你的数据有30000行时,另外29970行并不对应任何子控件。当最终用户在界面上上下滚动屏幕区域时,已经离开可见区域的子控件可能会触发一个类似 xxxxxUnload 的事件,随后就被重新用新数据绑定了(而不是销毁了),重新绑定之后就会再触发一个类似 xxxxxLoad 的事件。 也就是说,子控件的自动重用的。如果你遍历这些子控件,你只会得到较少的、绑定数据貌似混乱的结果。因为之后当前可见的那些子控件对象实例才保证绑定的数据是准确的,它们过了瞬间就会绑定到其它数据上! 所以要遍历DataGrid之类的控件所绑定的数据集合,那么就去遍历数据集合。千万不要去遍历其Items控件集合、在通过Item去访问绑定的数据对象,这是不会有稳定的和准确的结果的。

//仅供参考,不建议使用
for (int i = 0; i < gridBeamInfo.Items.Count; i++)
{
string beamName = (gridBeamInfo.Columns[0].GetCellContent(gridBeamInfo.Items[i]) as TextBlock).Text;
if (beamName == searchedBeamName)
{
gridBeamInfo.SelectedIndex = i;
gridBeamInfo.ScrollIntoView(gridBeamInfo.Items[i]);
//gridBeamInfo.Focus();
var searchedEle = beamInfoManager.BeamInfoDict[searchedBeamName];
EbDb.UIViewZoom(EbDb.ActivView2D.GView, searchedEle);
return;
} }

正解:是通过绑定的数据源,遍历数据源,然后将数据源强制转换为object,调用ScrollIntoView方法和设定SelectedItem属性即可。

for (int i = 0; i < beamInfoList.Count; i++)
{
//var textblock = gridBeamInfo.Columns[0].GetCellContent(gridBeamInfo.Items[i]) as TextBlock; 禁止使用该方法遍历DataGrid控件的cell,会出现访问越界的异常 if (beamInfoList[i].beamName==searchedBeamName)
{
gridBeamInfo.SelectedItem =(object)beamInfoList[i];
gridBeamInfo.ScrollIntoView((object)beamInfoList[i]);
//gridBeamInfo.Focus();
var searchedEle = beamInfoManager.BeamInfoDict[searchedBeamName];
EbDb.UIViewZoom(EbDb.ActivView2D.GView, searchedEle);
return;
}
}
  • 高亮被选择的Cell代码是
 gridBeamInfo.SelectedIndex = i;
gridBeamInfo.ScrollIntoView(gridBeamInfo.Items[i]);
<Page x:Class="EBPlugIn2.BeamSYPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:local="clr-namespace:EBPlugIn2" xmlns:system="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
d:DesignHeight="800" d:DesignWidth="190" Title="梁编号索引" Unloaded="Page_Unloaded" Loaded="Page_Loaded"> <Grid>
<Grid.RowDefinitions>
<RowDefinition Height="40"/>
<RowDefinition Height="*"/>
<RowDefinition Height="40"/>
</Grid.RowDefinitions>
<TextBox x:Name="searchbox" TextChanged="textbox_TextChanged" Grid.Row="0" Height="26">
<TextBox.Resources>
<VisualBrush x:Key="HintText" TileMode="None" Opacity="0.5" Stretch="None" AlignmentX="Left">
<VisualBrush.Visual>
<TextBlock FontStyle="Italic" Text="输入编号快速定位" FontSize="12"/>
</VisualBrush.Visual>
</VisualBrush>
</TextBox.Resources>
<TextBox.Style>
<Style TargetType="TextBox">
<Style.Triggers>
<Trigger Property="Text" Value="{x:Null}">
<Setter Property="Background" Value="{StaticResource HintText}"/>
</Trigger>
<Trigger Property="Text" Value="">
<Setter Property="Background" Value="{StaticResource HintText}"/>
</Trigger>
</Style.Triggers>
</Style>
</TextBox.Style>
</TextBox> <DataGrid x:Name="gridBeamInfo" AutoGenerateColumns="False" IsReadOnly="True" Grid.Row="1" SelectionMode="Single" SelectionChanged="gridBeamInfo_SelectionChanged">
<DataGrid.CellStyle>
<Style TargetType="DataGridCell">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True">
<Setter Property="Background" Value="RosyBrown"/>
<Setter Property="Foreground" Value="White"/>
</Trigger>
</Style.Triggers>
</Style>
</DataGrid.CellStyle>
<DataGrid.Columns>
<DataGridTextColumn Header="名称" Binding="{Binding beamName}" Width="2*"></DataGridTextColumn>
<DataGridTextColumn Header="数量" Binding="{Binding beamNum}" Width="*"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid> <Button Grid.Row="2" Content="关闭对话框" Height="26" Click="Button_Click"/>
</Grid> </Page>

WPF中无法访问到XXX

重新生成dll

WPF学习问题汇集:的更多相关文章

  1. WPF学习开发客户端软件-任务助手(下 2015年2月4日代码更新)

    时光如梭,距离第一次写的 WPF学习开发客户端软件-任务助手(已上传源码)  已有三个多月,期间我断断续续地对该项目做了优化.完善等等工作,现在重新向大家介绍一下,希望各位可以使用,本软件以实用性为主 ...

  2. WPF学习05:2D绘图 使用Transform进行控件变形

    在WPF学习04:2D绘图 使用Shape绘基本图形中,我们了解了如何绘制基本的图形. 这一次,我们进一步,研究如何将图形变形. 例子 一个三角形,经Transform形成组合图形: XAML代码: ...

  3. WPF学习之资源-Resources

    WPF学习之资源-Resources WPF通过资源来保存一些可以被重复利用的样式,对象定义以及一些传统的资源如二进制数据,图片等等,而在其支持上也更能体现出这些资源定义的优越性.比如通过Resour ...

  4. WPF学习之路初识

    WPF学习之路初识   WPF 介绍 .NET Framework 4 .NET Framework 3.5 .NET Framework 3.0 Windows Presentation Found ...

  5. WPF学习拾遗(二)TextBlock换行

    原文:WPF学习拾遗(二)TextBlock换行 下午在帮组里的同事解决一个小问题,为了以后方便,把就把它收集一下吧. 新建一个TextBlock作为最基础的一个控件,他所携带的功能相对于其他的控件要 ...

  6. WPF学习(8)数据绑定

    说到数据绑定,其实这并不是一个新的玩意儿.了解asp.net的朋友都知道,在asp.net中已经用到了这个概念,例如Repeater等的数据绑定.那么,在WPF中的数据绑定相比较传统的asp.net中 ...

  7. WPF学习:3.Border & Brush

    上一章<WPF学习:2.Layout-Panels-Countainers>主要介绍了布局,容器和面板.这一章主要开始介绍Border(边界)和Brush(画刷). 代码地址:http:/ ...

  8. wpf学习

    http://www.jikexueyuan.com/course/1231_3.html?ss=1 WPF入门教程系列二——Application介绍 http://www.cnblogs.com/ ...

  9. WPF学习笔记-用Expression Design制作矢量图然后导出为XAML

    WPF学习笔记-用Expression Design制作矢量图然后导出为XAML 第一次用Windows live writer写东西,感觉不错,哈哈~~ 1.在白纸上完全凭感觉,想象来画图难度很大, ...

  10. WPF 学习笔记-在WPF下创建托盘图标

    原文:WPF 学习笔记-在WPF下创建托盘图标 首先需要在项目中引用System.Windows.Forms,System.Drawing; using System; using System.Co ...

随机推荐

  1. Edge、谷歌浏览器默认下载器开启多线程下载

    浏览器默认下载器开启多线程下载 Chrome 浏览器,地址栏输入并回车: chrome://flags/#enable-parallel-downloading Edge 新版浏览器,地址栏输入并回车 ...

  2. mybatis-generator 自动生成mybatis代码与xml

    一.pxm.xml中引入mybatis-generator并配置 在build节点下的plugins下添加org.mybatis.generator 示例代码如下: <?xml version= ...

  3. Java 解析XML的几种方式:DOM、SAX、JDOM和DOM4J。

    归纳总结Java解析XML主要有四中方式,分别是DOM.SAX.JDOM和DOM4J.其中DOM和SAX是官方包自带,另外两个JDOM和DOM4J是第三方包. 一.此篇测试代码用到的XML情况 . 1 ...

  4. python二级 计算生态

    生态地址: https://pypi.python.org/pypi 常用函数:

  5. BUGKU_PWN_OVERFLOW2_WP

    WP_OVERFLOW2 拿到程序,首先放到我们的kali里面看看是多少位的程序,然后在看看有没有什么安全属性 64位程序,并且开启了RELRO,NX 也就是说,这道题我们需要使用ROP绕过 使用id ...

  6. OSPF协议报文

    OSPF(Open Shortest Path First,开放最短路径优先)是一种内部网关协议(Interior Gateway Protocol,IGP),用于在同一个自治系统(Autonomou ...

  7. 浅谈 C# 13 中的 params 集合

    前言 在 C# 13 中,params 的改进使其从可变数量的数组参数升级为可变数量的集合类型参数.这一改进通过支持高性能集合类型(如Span<T>,ReadOnlySpan<T&g ...

  8. SQL Server如何跟踪自动统计信息更新?

    SQL Server数据库中,我们都清楚统计信息对于优化器来说非常重要.一般情况下,我们会开启"自动更新统计信息"(Auto Update Statistics)这个选项,以便数据 ...

  9. windows 10 平台使用命令行批量获取一个文件夹下所有文件的路径

    1 打开命令行, 定位路径到指定磁盘 2 使用cd命令定位到指定路径 3 输入以下命令, 想要的结果就保存在了filename.txt中 dir /b/s filename.txt 结果:

  10. Sublime Text 3汉化教程

    一.初始化插件仓库 ctrl+`(esc键下方那一个)打开控制台输入以下代码回车 import urllib.request,os,hashlib; h = '6f4c264a24d933ce70df ...