[编辑]:我想出了如何自己做这件事.我发布了我的解决方案,希望能在几天谷歌上搜索其他人.如果您是WPF大师,请查看我的解决方案,让我知道是否有更好/更优雅/更有效的方法来做到这一点.特别是,我有兴趣知道我不知道的...这个解决方案怎么会让我不知所措?问题实际上归结为暴露内部控制属性.
问题:我正在创建一些代码,以便在WPF中为XML文件自动生成数据绑定GUI.我有一个xsd文件,可以帮助我确定节点类型等.简单的键/值元素很容易.
当我解析这个元素时:
<Key>value</Key>
Run Code Online (Sandbox Code Playgroud)
我可以创建一个新的'KeyValueControl'并设置DataContext为这个元素.KeyValue被定义为UserControl,并且只有一些简单的绑定.它适用于任何简单的XElement.
此控件中的XAML如下所示:
<Label Content={Binding Path=Name} />
<TextBox Text={Binding Path=Value} />
Run Code Online (Sandbox Code Playgroud)
结果是一行包含带有元素名称的标签和一个带有我可以编辑的值的文本框.
现在,有时我需要显示查找值而不是实际值.我想创建一个类似于上面KeyValueControl的'KeyValueComboBox',但是能够指定(基于文件中的信息)ItemsSource,Display和Value路径.'Name'和'Value'绑定与KeyValueControl相同.
我不知道标准用户控件是否可以处理这个问题,或者我是否需要从Selector继承.
控件中的XAML看起来像这样:
<Label Content={Binding Path=Name} />
<ComboBox SelectedValue={Binding Path=Value}
ItemsSource={Binding [BOUND TO THE ItemsSource PROPERTY OF THIS CUSTOM CONTROL]
DisplayMemberPath={Binding [BOUND TO THE DisplayMemberPath OF THIS CUSTOM CONTROL]
SelectedValuePath={Binding [BOUND TO THE SelectedValuePath OF THIS CUSTOM CONTROL]/>
Run Code Online (Sandbox Code Playgroud)
在我的代码中,我会做这样的事情(假设这个节点是'Thing'并且需要显示Things列表,以便用户可以选择ID:
var myBoundComboBox = new KeyValueComboBox();
myBoundComboBox.ItemsSource = getThingsList();
myBoundComboBox.DisplayMemberPath = "ThingName";
myBoundComboBox.ValueMemberPath = "ThingID"
myBoundComboBox.DataContext = thisXElement;
...
myStackPanel.Children.Add(myBoundComboBox)
Run Code Online (Sandbox Code Playgroud)
所以我的问题是:
1)我应该从Control或Selector继承我的KeyValueComboBox吗?
2)如果我应该从Control继承,我如何公开内部组合框的ItemsSource,DisplayMemberPath和ValueMemberPath以进行绑定?
3)如果我需要继承Selector,有人可以提供一个小例子来说明我如何开始使用它吗?再说一次,我是WPF的新手,所以如果这是我需要走的路,一个好的,简单的例子真的会有所帮助.
我需要使用现有的文本文件来存储一些非常精确的值.读回时,数字基本上必须与最初写入的数字完全相同.现在,正常人会使用二进制文件......出于多种原因,在这种情况下这是不可能的.
所以......你们中的任何人都有一种很好的方法可以将double编码为一串字符(除了提高精度).我的第一个想法是将双重转换为char []并写出字符.我不认为这会起作用,因为有些角色不可见,产生声音,甚至终止字符串('\ 0'......我正在和你说话!)
思考?
[编辑] - 一旦我弄清楚哪个解决方案最适合我,我会将其标记为"解决方案".
我正在建立一个离散事件模拟器.维基百科提到有几个通用优先级队列可以在DES中使用.具体来说,它提到日历队列是一个很好的结构.我找到了一个提到日历队列的pdf(从1988年开始),但在大多数情况下我找不到任何关于它们的内容.有人会介意解释什么是Calendar Queue,它们是如何使用的,以及我可能会在哪里找到示例实现?
language-agnostic algorithm simulation priority-queue data-structures
我正在考虑在一个计算密集的程序上使用Scala.对我们代码的C++版本进行概要分析表明,我们可以从Lazy评估中获益.我已经在Scala 2.9.1中尝试过并且非常喜欢它.但是,当我通过反编译器运行该类时,实现看起来并不正确.我假设它是反编译器的神器,但我想得到一个更确定的答案......
考虑以下简单的例子:
class TrivialAngle(radians : Double)
{
lazy val sin = math.sin(radians)
}
Run Code Online (Sandbox Code Playgroud)
当我反编译它,我得到这个:
import scala.ScalaObject;
import scala.math.package.;
import scala.reflect.ScalaSignature;
@ScalaSignature(bytes="omitted")
public class TrivialAngle
implements ScalaObject
{
private final double radians;
private double sin;
public volatile int bitmap$0;
public double sin()
{
if ((this.bitmap$0 & 0x1) == 0);
synchronized (this)
{
if (
(this.bitmap$0 & 0x1) == 0)
{
this.sin = package..MODULE$.sin(this.radians);
this.bitmap$0 |= 1;
}
return this.sin;
}
}
public TrivialAngle(double radians)
{
}
}
Run Code Online (Sandbox Code Playgroud)
对我来说,返回区块位于错误的位置,您将始终获得锁定.这不是真正的代码所做的,但我无法证实这一点.任何人都可以确认或否认我有一个虚假的反编译,并且懒惰的实现有点合理(即,只有在计算值时才锁定,并且不会为后续调用获取锁定?)
谢谢!
作为参考,这是我使用的反编译器: …
performance synchronization decompiling scala lazy-evaluation
编辑:我的样本量太小.当我对8个CPU的实际数据进行运行时,我看到速度提高了7.2倍.在我的代码中添加4个字符并不太简陋;)
我目前正在尝试"销售"管理使用Scala的好处,特别是在扩展CPU时.为此,我创建了一个简单的测试应用程序,它可以执行一系列矢量数学运算,并且发现在我的四核机器上运行时并不是特别好.有趣的是,我发现运行时是第一次通过集合时最差,并且随后的调用会变得更好.并行集合中是否存在导致此问题的一些懒惰事物,或者我只是做错了?应该注意的是,我来自C++/C#世界,所以我完全可能以某种方式搞砸了我的配置.无论如何,这是我的设置:
InteliJ Scala插件
Scala 2.9.1.final
Windows 7 64位,四核处理器(无超线程)
import util.Random
// simple Vector3D class that has final x,y,z components a length, and a '-' function
class Vector3D(val x:Double, val y:Double, val z:Double)
{
def length = math.sqrt(x*x+y*y+z*z)
def -(rhs : Vector3D ) = new Vector3D(x - rhs.x, y - rhs.y, z - rhs.z)
}
object MainClass {
def main(args : Array[String]) =
{
println("Available CPU's: " + Runtime.getRuntime.availableProcessors())
println("Parallelism Degree set to: " + collection.parallel.ForkJoinTasks.defaultForkJoinPool.getParallelism);
// my position
val …Run Code Online (Sandbox Code Playgroud) 我正在将2.9.*项目更新为2.10.我有几个基本类型(角度,长度等)的类,看起来它们是值类型的完美候选者.不幸的是,我使用这些类型的Java代码没有编译,我无法弄清楚原因.我把它简化为一组非常简单的代码.任何建议将不胜感激.
角度类定义(scala)
package com.example.units
class Angle(val radians : Double) extends AnyVal
{
def degrees = radians * 180.0 / math.Pi
}
object Angle
{
val Zero = new Angle(0)
}
Run Code Online (Sandbox Code Playgroud)
角度测试用例(用Java编写的痛苦)
package com.example.units;
import junit.framework.Assert;
import org.junit.Test;
public class AngleTest
{
@Test
public static void TestZero()
{
Angle a = Angle.Zero();
Assert.assertEquals(a.degrees(), 0, 1E-9);
}
}
Run Code Online (Sandbox Code Playgroud)
当我编译时,我收到此错误:
AngleTest.java:19 incompatible types
found :double
required: com.example.units.Angle
Angle a = Angle.Zero();
^
Run Code Online (Sandbox Code Playgroud)
它看起来好像Angle.Zero被返回为double,而不是Angle.我尝试添加box/unbox方法,但继续收到相同的错误.再次,任何帮助将不胜感激.
我在eclipse中有一个多项目Scala工作区.我认为我对Scala导入软件包的方式缺乏了解,但是我花了更多的时间来考虑寻找解决方案后,我无法想象这一点.我在一个简单的2项目设置中重新创建了这个问题.
项目1:com.foo.mathematics包含一个简单的Vector类
包含一个文件:
package com.foo.mathematics
class Vector2D(x : Double, y : Double) {
def length = math.sqrt(x*x + y*y)
}
Run Code Online (Sandbox Code Playgroud)
项目2:com.foo.analysis
package com.foo.analysis
import com.foo.mathematics.Vector2D
class Frame(xAxis : Vector2D, yAxis : Vector2D) {
}
Run Code Online (Sandbox Code Playgroud)
Eclipse在导入行中显示错误,我得到的错误消息是:对象数学不是包com.foo的成员.
在大纲视图中,我的import语句说明了这一点:
com.foo.analysis.<error: <none>>.Vector2D
Run Code Online (Sandbox Code Playgroud)
我尝试将导入更改为:
import mathematics.Vector2D
import _root_.com.foo.mathematics.Vector2D
Run Code Online (Sandbox Code Playgroud)
两个人都没有......
我错过了什么?
背景:我是一名C#开发人员,但我的下一个项目需要在JVM上.我研究过Scala,我认为它让我能够用C#(Lambdas,推断类型,功能风格等)来实现.我将自己归类为一个非常新手的Java开发人员......特别是在使用IDE等时.
我有一个似乎有效的Scala项目......我创建了一个Java项目并引用了Scala项目编辑器似乎知道Scala项目中的类(typeahead等)
当我尝试运行Java项目时,我收到此错误:
Exception in thread "main" java.lang.NoClassDefFoundError: scala/ScalaObject
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at learning_scala.java.Main.main(Main.java:12)
Caused by: java.lang.ClassNotFoundException: scala.ScalaObject
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
Run Code Online (Sandbox Code Playgroud)
很明显,Java/Scala编译中出现了一些问题,但我不知道如何解决它(我缺乏Java经验是这里的罪魁祸首)
我正在使用带有官方Scala插件的Eclipse ......所有这些都是2-3天前的最新版本.
谢谢
我正在尝试在列表中处理三元组.当然,我可以做到这一点:
for(i = 1; i < list.length-1; i++)
{
process( list[i-1], list[i], list[i+1] )
}
Run Code Online (Sandbox Code Playgroud)
在Scala中是否有一个List函数(或者如何编写它)可以执行以下操作:
val data = [1,2,3,4,5,6,7,8,9,10]
val tuples = data.some_magic_func
tuples would be[(1,2,3), (2,3,4), (3,4,5), (4,5,6) ... ]
Run Code Online (Sandbox Code Playgroud)
谢谢!
我正在研究Scala项目,我们希望使用XML来使用JAXB(而不是Spring)初始化我们的对象.我有一个层次结构,在子类中添加更多的数据成员.一个简单的例子看起来像这样:
class Animal
{
string name
}
class Cat extends Animal
{
int numLives
}
class Dog extends Animal
{
bool hasSpots
}
Run Code Online (Sandbox Code Playgroud)
我希望能够从XML块初始化动物列表,如下所示:
<Animals>
<Cat>
<name>Garfield</name>
<numLives>9</numLives>
</Cat>
<Dog>
<name>Odie</name>
<hasSpots>false</hasSpots>
</Dog>
</Animals>
Run Code Online (Sandbox Code Playgroud)
我们如何在类中设置注释以便能够处理这个?
scala ×6
java ×3
eclipse ×2
algorithm ×1
binding ×1
c++ ×1
classpath ×1
combobox ×1
decompiling ×1
file-format ×1
file-io ×1
import ×1
jaxb ×1
list ×1
multicore ×1
package ×1
performance ×1
runtime ×1
scala-ide ×1
scalability ×1
simulation ×1
string ×1
tuples ×1
value-type ×1
wpf ×1
xml ×1
xml-parsing ×1