在我的应用程序中(这与非常动态的导航和内容呈现有关)我必须在XAML中使用这个构造:
<ContentControl Content={Binding ContentElement} />
Run Code Online (Sandbox Code Playgroud)
到现在为止还挺好.这很棒,绝对棒极了.我可以在任何地方接待任意的东西.
但似乎有一个奇怪的,好吧,让我们称之为WPF中的"现象"(我相信它在BindingMarkupExtension中,但还不确定):
当我的ContentElement属性如下所示:
public FrameworkElement ContentElement
{
get
{
return this.m_ContentElement;
}
}
Run Code Online (Sandbox Code Playgroud)
然后getter被称为TWICE(!!!)用于每个数据绑定操作(这包括用户在运行时更改语言或重新加载主机控件时).
然而(这对我来说真是难以置信):
当我将ContentElement属性更改为:
public object ContentElement
{
get
{
return this.m_ContentElement;
}
}
Run Code Online (Sandbox Code Playgroud)
然后getter被调用一次.说真的,我不是在这里.它在最简单的应用程序中绝对可重现,您可以尝试返回一个新的"TextBlock"(这就是我通常用来测试或了解更高级的WPF概念).
有什么想法吗?
我问的原因是我讨厌解决方案的以下后果:
嗯,这是语言不可知的,我更喜欢用C#或F#来做,但是这次我更感兴趣的是"无论如何这样做".
我想要完成的是:
a)我想学习它 - 这次是关于我的自我,这是一个有趣的项目,我想向自己展示我对这个东西非常擅长
b)我对EBNF知之甚少(虽然我还不知道,运算符优先级如何在EBNF中起作用 - Irony.NET做得对,我查看了这些例子,但这对我来说有点不祥)
c)我的解析器应该能够这样:5*(3 +(2 - 9*(5/7))+ 9)例如,给我正确的结果
d)坦率地说,这似乎是为我编写编译器甚至是解释器的最大问题.我甚至可以生成64位汇编代码(我可以手动编写汇编程序),但公式解析器...
e)另一种想法:即使是简单的计算机(比如我的旧款Sharp 1246S只有大约2kB的RAM)也能做到这一点......它不会那么难,对吧?甚至非常非常古老的编程语言都有公式评估... BASIC是从1964年开始的,他们已经可以计算出我所提出的公式类型作为例子
f)一些想法,一些灵感就足够了 - 我根本不知道如何做运算符优先级和括号 - 但是,我知道它涉及AST并且许多人使用堆栈
所以你怎么看?
language-agnostic compiler-construction parsing interpreter formula
所以我正在编写一个缓存系统(不是太复杂,但它有非常好的语义)和ttl(生存时间)的项目.
当然ttl必须经过单元测试,但由于无法在C#中注入"IDateTime"或"ITimeSpan"的新实现(因为没有这样的东西),你会怎么做呢?
首先写一个新的组件"IDateTimeProvider"和"DateTimeProvider",然后哪个可以模拟?
是不是重新实现了.NET运行时库的一部分......难以理解?
编辑:谢谢大家的惊人答案!我现在知道我要做什么了!
这对我来说是个大问题.我想编写一个从在线WCF服务中获取数据的WPF/MVVM应用程序.
问题是,提取过程必须是每个,比如15秒(这是一个时间关键的应用程序).
有一个不断变化的IEnumerable,每次检查WCF服务时,我都会得到不同的值,因为还有时间数据.
我该怎么办呢?清除ViewModel中的ObservableCollection可能不对,或者是吗?
因此,我需要在C#中创建一个结构,该结构将充当(很大)字典的键,如下所示:
private readonly IDictionary<KeyStruct, string> m_Invitations;
Run Code Online (Sandbox Code Playgroud)
问题是,我真的需要一个结构用作键,因为只能通过两个单独的数据项来标识条目,其中一个可以是空(不仅是空!)字符串。
我需要在该结构上实现什么?您将如何创建哈希?哈希冲突(偶尔发生)会严重影响性能还是可以忽略不计?
我问,因为这是“内循环”代码。
c# ×2
data-binding ×2
wpf ×2
datetime ×1
dictionary ×1
formula ×1
hash ×1
interpreter ×1
mvvm ×1
parsing ×1
unit-testing ×1