我正在尝试使用数据绑定创建一个简单的WPF应用程序.代码看起来很好,但是当我更新我的属性时,我的视图没有更新.这是我的XAML:
<Window x:Class="Calculator.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:calculator="clr-namespace:Calculator"
Title="MainWindow" Height="350" Width="525"
Name="MainWindowName">
<Grid>
<Label Name="MyLabel" Background="LightGray" FontSize="17pt" HorizontalContentAlignment="Right" Margin="10,10,10,0" VerticalAlignment="Top" Height="40"
Content="{Binding Path=CalculatorOutput, UpdateSourceTrigger=PropertyChanged}"/>
</Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)
这是我的代码隐藏:
namespace Calculator
{
public partial class MainWindow
{
public MainWindow()
{
DataContext = new CalculatorViewModel();
InitializeComponent();
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的视图模型
namespace Calculator
{
public class CalculatorViewModel : INotifyPropertyChanged
{
private String _calculatorOutput;
private String CalculatorOutput
{
set
{
_calculatorOutput = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void NotifyPropertyChanged([CallerMemberName] String propertyName = …Run Code Online (Sandbox Code Playgroud) 我的List记忆力很大,来自一个大约20岁的班级properties.
我想基于一个过滤此列表property,对于特定任务,我只需要一个列表property.所以我的查询是这样的:
data.Select(x => x.field).Where(x => x == "desired value").ToList()
Run Code Online (Sandbox Code Playgroud)
哪一个让我有更好的表现,Select先使用或使用Where?
data.Where(x => x.field == "desired value").Select(x => x.field).ToList()
Run Code Online (Sandbox Code Playgroud)
如果这与data type我将数据保存在内存或字段类型中有关,请告诉我.请注意,我也需要这些对象用于其他任务,因此我无法在首先过滤它们并将它们加载到内存之前.
我发现在表结构或正常单元格中插入行 - 手动或其他 - 非常非常慢.就像在一个表中(仅包含文字字符串)或在相邻单元格中,在没有条件格式的工作表中插入7行需要超过10分钟.
该工作簿有45个工作表和20个表,较大的表具有大约10KB的XML文件.有大约33MB的电子表格XML,大多数大约300KB,5个超过1MB,一个是15MB.它相当复杂,但不是很大.所有的计算都很好地从左到右一直向下流动,从右到右到另一张,我主要设法避免使用数组公式.所有表都有规则结构,计算列只有一个公式.大多数表格列都是计算出来的,只有几个较小的列包含文字数据.
我确实在几张纸上有很多条件格式,但是我一直非常小心地保持它理性并阻止它碎片化:我对整张纸有大约45条规则,这些规则被推广到涵盖所有列.格式化决策的主要处理作为辅助列移动到表中,正如我所说,结构非常规则.
看起来这些类型的编辑不是线程安全的,因此只有一个处理器正在加载并且光盘活动非常轻.我无法理解excel一直在做什么.当然我把计算设置为手动......
我已经看到评论将这类事物归因于增加的行和列限制,但我不明白为什么这应该是一个因素.如果我查看电子表格的XML文件,则只有行或列的代码会被值或公式占用.那么为什么无人居住的细胞在起作用呢?
这对我的工作效率产生了巨大的影响 - 尽管我在新发现的业余时间里通过阅读这样的网站来学习很多东西.我真的需要弄清楚问题是什么,以便我尽可能避免或解决这个问题.
有人可以帮助我吗?
为了防止人们对此感到疑惑,答案是在excel中使用电源查询和电源视图.我发现中等(500k行)数据集和复杂的结构和转换都顺利完成.我再也不会在表格中使用公式了.另一件事是,这自然会让你获得伟大的力量.这是我的小费.
我在各个地方读到API定时器在VBA中存在风险,如果在定时器运行时编辑单元,它将导致Excel崩溃.但是由于Jordan Goldmeier而来自http://optionexplicitvba.wordpress.com的这段代码似乎没有这个问题.它使用计时器淡化弹出窗口,当它褪色时,我可以单击并在单元格和公式栏中输入文本而没有任何问题.
什么时候API计时器安全,什么时候不安全?是否有一些具体原则可以帮助我理解? 崩溃的机制是什么:究竟发生了什么使Excel崩溃?
Option Explicit
Public Declare Function SetTimer Lib "user32" ( _
ByVal HWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
Public Declare Function KillTimer Lib "user32" ( _
ByVal HWnd As Long, _
ByVal nIDEvent As Long) As Long
Public TimerID As Long
Public TimerSeconds As Single
Public bTimerEnabled As Boolean
Public iCounter As Integer
Public bComplete As Boolean
Public EventType …Run Code Online (Sandbox Code Playgroud) 我可以选择并突出显示IE中的td元素,但不能使用tr:active突出显示tr中的所有td.这在FireFox和Chrome中可以正常使用. 这是一个JsFiddle示例,我在CSS中做错了什么?
还在做......

在Chrome,Safari,Opera和FF ......
HTML
<body>
<br />
<div id="rowCount">
<table class='t2'>
<tr>
<th>Click a Cell should highlight all in the row</th>
</tr>
<tr>
<td>tr:active td</td>
<td>td:active</td>
</tr>
</table>
</div>
</body>
Run Code Online (Sandbox Code Playgroud)
CSS
table {
cursor: default;
border: 1px solid black;
background-color: transparent;
}
div {
z-index: 0;
display: block;
border:4px solid #CC3300;
width: 80%;
background-color: #4D70DB;
}
th{
text-align: left;
}
td{
border: 1px solid #000000;
}
tr:hover td {
border:1px solid #CC3300;
}
tr:active td{
background-color: #CC3300; …Run Code Online (Sandbox Code Playgroud) 当我在excel中的窗口之间切换时,我可以看到WindowActivate事件在不同级别触发,但是当excel成为前台应用程序时有没有办法触发事件?如果我单击excel并工作,例如在浏览器中工作一段时间,然后单击返回到Excel窗口,我看不到任何事件触发.有没有办法检测到这个?
我想刷新我的VBA应用程序的一些元素,因为偶尔我会发现基于超文本函数的鼠标悬停功能失去了激活图表的能力.我可以通过取消保护和保护工作表,或通过废弃和重新初始化我的对象的子集来解决它.我想在我正在寻找的事件上触发此操作.
我也可以通过SendKeys做到这一点,但它并不好,因为它消除了键盘设置(例如滚动锁定),因为SendKeys中记录的错误,它使屏幕闪烁超过我想要的.
由于代码将驻留在VBA中,因此我会将操作限制为特定的工作簿.如果在进入Excel实例窗口时激活了另一个(被动)工作簿,则不会触发任何操作,并且当用户选择包含它的工作簿时,我可以使用WorkbookActivate事件刷新应用程序.
我正在逐步完成WPF源代码,用我自己的代码调试一些问题.我有源和pdb(我使用dotpeek作为符号服务器,所以我有完整的pdbs源代码),我可以进入WPF代码没问题.我感兴趣的模块是PresentationFramework和System.Xaml.调试体验非常糟糕,因为框架模块已经过优化(通常是一件好事!).
我的(非常vauge)理解是他们在安装时用VS或其他任何东西预先用ngen.exe进行JIT编辑......这导致混淆.
据我了解,我可以使用ngen.exe(从Visual Studio文件夹启动的Developer Command Prompt)卸载本机映像文件.例如...
ngen uninstall PresentationFramework
Uninstalling assembly PresentationFramework, Version=3.0.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=msil
Uninstalling assembly PresentationFramework, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35
Uninstalling assembly PresentationFramework, Version=4.0.0.0, Culture=Neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=msil
Run Code Online (Sandbox Code Playgroud)
我认为这将迫使C#编译器恢复到MSIL版本并且JIT在运行时编译它们.我还假设我可以禁用运行时JIT优化,这就是我如何获得不错的调试体验.
但是,卸载目标本机映像证明很麻烦.Ngen做到了,但就调试体验而言,它没有任何影响.
当我尝试再次卸载相同的模块时,我被告知它们没有安装 - 这是令人鼓舞的 - 但我还得到一个依赖于它们的文件列表,很多dll和exe文件以及一些本机图像文件(大约十个)和以下信息......
You may need to uninstall these assembly roots in order to delete the native image for PresentationFramework
Error: The specified assembly is not installed.
Run Code Online (Sandbox Code Playgroud)
所以,我假设我需要找到这十个文件的根,并从那里开始卸载所有内容.如果存在一系列依赖关系,这可能会很快失控.
假设我可以获得未经优化的模块,为了抑制JIT优化,我将ini文件添加到与我想要逐步执行的模块相同的文件夹中,例如,C:\Windows\Microsoft.NET\assembly\GAC_MSIL\PresentationFramework\v4.0_4.0.0.0__31bf3856ad364e35我已经
PresentationFramework.ini
[.NET Framework Debugging Control]
GenerateTrackingInfo=1
AllowOptimize=0
Run Code Online (Sandbox Code Playgroud)
在工具/选项/调试/常规/我已禁用启用源服务器支持,并在启用模块加载时抑制JIT优化.
在Project Options中,我在Build部分中禁用了Optimize代码,我还在Build/Advanced中将Debugging信息设置为full.
我是在正确的轨道上吗?在VS的某个地方是否有配置选项我可以告诉它使用dll文件并忽略积极优化的原生图像?
c# .net-4.0 compiler-optimization windows-10 visual-studio-2015
我有一些代码,它采用列中元素的值并将它们放入一个数组中:
var someArray = new Array(rows.selectAll("td").filter(function(d,i)
{
if(i==2) //index of the cells in the rows where I retrieve the data
{
return (d3.select(this))
}
}));
Run Code Online (Sandbox Code Playgroud)
^创建一个数组[1]的数组,它具有元素中单元格的值,例如"2.6"或"5.4"
当我尝试使用时:
console.log(d3.min(someArray));
Run Code Online (Sandbox Code Playgroud)
我得到[Array [1],Array [1],Array [1],...]而我需要返回的是那些数组中最低的,然后是最大的值(这将在d3.scale.linear中使用( ).domain([最小值,最大值])
任何人都可以向我解释为什么这两个表达式会返回不同的值...
log1.text(c20(1)); // "#aec7e8"
log2.text(d3.scale.category20()(1)); // "#1f77b4"
Run Code Online (Sandbox Code Playgroud)
......在以下背景下
var c20 = d3.scale.category20(),
col = d3.range(20).map(function(c) {
return c20(c).replace("#", "0x")
}),
log1 = d3.select("#log1"),
log2 = d3.select("#log2");
log1.text(c20(1)); // "#aec7e8"
log2.text(d3.scale.category20()(1)); // "#1f77b4"
$("#user-agent").text(navigator.userAgent);Run Code Online (Sandbox Code Playgroud)
#log div {
display: inline-block;
margin: 0 0 0 10px;
background: #ccc;
}Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js"></script>
<div id="log">
<div id="log1"></div>
<div id="log2"></div>
</div>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title></title>
</head>
<body>
<div id="container"></div>
<p id="user-agent"></p>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.5.6/d3.min.js"></script>
<div id="log1"></div>
<div id="log2"></div>
</body>
</html> …Run Code Online (Sandbox Code Playgroud)我有一个自定义文本框定义如下:
public class CustomTextBox : TextBox
{
public static DependencyProperty CustomTextProperty =
DependencyProperty.Register("CustomText", typeof(string),
typeof(CustomTextBox));
static CustomTextBox()
{
TextProperty.OverrideMetadata(typeof(SMSTextBox),
new FrameworkPropertyMetadata(string.Empty,
FrameworkPropertyMetadataOptions.Journal |
FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,
new PropertyChangedCallback(CustomTextBox_OnTextPropertyChanged));
}
public string CustomText
{
get { return (string)GetValue(CustomTextProperty); }
set { SetValue(CustomTextProperty, value); }
}
private static void CustomTextBox_OnTextPropertyChanged(DependencyObject d,
DependencyPropertyChangedEventArgs e)
{
CustomTextBox customTextBox = d as CustomTextBox;
customTextBox.SetValue(CustomTextProperty, e.NewValue);
}
}
Run Code Online (Sandbox Code Playgroud)
我正在绑定XAML中的自定义文本属性 -
<local:CustomTextBox CustomText="{Binding ViewModelProperty}" />
Run Code Online (Sandbox Code Playgroud)
我面临的问题是,当我在CustomTextBox中输入任何内容时,更改不会反映在ViewModelProperty中,即ViewModelProperty没有得到更新.CustomTextProperty正在更新,但我想我需要做一些额外的事情来使绑定工作.
我不做什么?我将不胜感激任何帮助.
谢谢
c# ×3
excel ×3
d3.js ×2
javascript ×2
vba ×2
wpf ×2
.net-4.0 ×1
arrays ×1
binding ×1
css ×1
data-binding ×1
excel-vba ×1
insertion ×1
linq ×1
performance ×1
pseudo-class ×1
timer ×1
windows-10 ×1