小编Tom*_*ies的帖子

WPF切换按钮的IsChecked属性的ValueConverter

我正在尝试编写一个值转换器,以将WPF ToggleButton的Boolean IsChecked属性绑定到模型中的非布尔值(碰巧是双精度)。我编写的convert函数如下所示:

        public object Convert(object value, Type targetType, object paramter, System.Globalization.CultureInfo culutre)
        {
          if (targetType != typeof(Boolean))
            throw new InvalidOperationException("Target type should be Boolean");

          var input = double.Parse(value.ToString());

          return (input==0.0) ? false: true;
        }
Run Code Online (Sandbox Code Playgroud)

问题是,当调用函数时,targetType不是我期望的-它是

            "System.Nullable`1[[System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]]"
Run Code Online (Sandbox Code Playgroud)

而不是System.Boolean。这是预期的吗?过去我没有麻烦地写了其他转换器。

data-binding wpf ivalueconverter

4
推荐指数
1
解决办法
2400
查看次数

在WPF MVMM应用程序中测试View

我刚刚开始参与令人兴奋的WPF开发世界,多年来一直是C++开发人员.

当然,使用丰富的用户界面测试应用程序总是很难.传统上,复杂化的问题之一是,在大多数Windows应用程序中,UI,UI逻辑和App逻辑都是完全相互依赖的,无法单独测试.

我非常喜欢MVVM方法,它允许我将UI与应用程序分开,并在我的视图模型上运行大量自动化测试,在我的所有逻辑下面,视图是一个相当愚蠢的客户端视图模型.

这一切都很好,并且巧妙地将应用程序逻辑的测试从应用程序UI中分离出来.但是,它没有提供实际测试UI本身的解决方案.即使视图通常包含非常少的逻辑,它仍然可能包含大量的各种错误.

测试视图本身的当前技术水平是什么?

谢谢汤姆

wpf functional-testing mvvm

3
推荐指数
1
解决办法
1447
查看次数

根据一个向量内的值从两个向量中删除项目

我有两个相等长度的整数向量.假设我要删除第一个向量中NAN的所有项.显然,我使用remove_if算法.让我们说这会删除索引1,2,5处的元素.然后我想在这些索引处从第二个向量中删除项目.

这种规范的C++最常用的方法是什么?

c++ stl vector

3
推荐指数
2
解决办法
695
查看次数

从C#调用dll函数时的PInvokeStackImbalance

我正在编写一个WPF应用程序,需要调用我编写的dll中存在的一些C++代码.我总是得到PInvokeStackImbalance错误,即使是最基本的测试功能.例如,在C++ DLL中:

extern "C" __declspec(dllexport) void Test( int foo);
Run Code Online (Sandbox Code Playgroud)

该功能什么都不做.c#侧看起来像这样:

    [DllImport("myDll.dll", CharSet = CharSet.Auto)]
    private static extern void Test( int foo);
Run Code Online (Sandbox Code Playgroud)

我称之为c#函数是这样的:

测试(1)

......我得到了一个PInvokeStackImbalance !! 怎么会这样?

提前致谢...

汤姆

c# pinvoke dllimport dllexport

2
推荐指数
1
解决办法
484
查看次数

Marshaling SafeHandles从非托管到托管

在我写的本机dll包装器中,我刚刚用SafeHandles替换了IntPtr(用于编组句柄)的所有用法.我的印象是,正确编写的SafeHandle类型可以通过这种方式与IntPtr互换.

但是,我的Marshal.GetFunctionPointerForDelegate调用现在抛出一个异常:

Cannot marshal 'parameter #n': SafeHandles cannot be marshaled from unmanaged to managed.
Run Code Online (Sandbox Code Playgroud)

回调在参数列表中包含一个句柄,因此委托包含一个SafeHandle(而不是像以前一样的IntPtr).那我可以不这样做吗?如果是这样,我有什么选择使用SafeHandles,因为我需要编组回调?

这是一个原生dll头的编辑示例:

struct aType aType;
typedef void (*CallBackType)(aType*, int);
aType* create(); // Must be released
void   release(aType* instance);
int    doSomething(aType* instance, int argumnet);
void   setCallback(CallbackType func);
Run Code Online (Sandbox Code Playgroud)

导致我麻烦的是回调.C#端看起来像这样:

delegate void CallBackType(IntPtr instance, int argument);
Run Code Online (Sandbox Code Playgroud)

然后:

var funcPtr = Marshal.GetFunctionPointerForDelegate(del = new CallbackType(somefunc)):

NativeFunction.setCallback(funcPtr)
Run Code Online (Sandbox Code Playgroud)

这工作正常,而且一直都做到了.但是,我想从IntPtr转移到将句柄管理到安全处理,并且读到它是一个替代品.但是,在上面的C#代码中用SafeHandle子类替换IntPtr会导致报告的异常:

 delegate void CallBackType(MySafeHandle instance, int argument);
Run Code Online (Sandbox Code Playgroud)

c# pinvoke interop marshalling

2
推荐指数
1
解决办法
1757
查看次数

动画列表框滚动

我有一个垂直的 WPF 列表框,绑定到一个集合,带有一个自定义的 ItemTemplate。我注意到了一些事情:

  1. 与独立的滚动查看器不同,列表框不会连续滚动,而是以等于项目高度的增量跳跃。这种差异在 XAML 中的何处定义(列表框模板毕竟只包含一个滚动查看器?

  2. 是否可以为这个跳跃设置动画?我正在尝试对此进行动画处理,以便它可以快速为从一个偏移量跳转到另一个偏移量设置动画。锦上添花的是动画在最后显示一些内部和“摆动”。我希望会有一个预定义的行为,但似乎没有。尝试自己在带有 BeginAnimation 的代码中执行此操作失败,抛出的异常告诉我无法对 Scrollviewer 的 VerticalOffset 属性进行动画处理。

有什么线索吗?

谢谢汤姆

c# wpf animation listbox scrollviewer

1
推荐指数
1
解决办法
3164
查看次数

确保A类只能由B类创建

我已经在SO(和其他地方)上阅读了关于这个主题的一些讨论,但没有能够收集到明确的答案.

我想确保给定的类A只能由特定的类B创建.在C++中,我将构建一个私有的构造函数,并将B指定为朋友.现在只有B才能创造A.

在C#中这样做的惯用方法是什么,如果确实有一个呢?

c# constructor factory

1
推荐指数
1
解决办法
162
查看次数