小编Dav*_*eli的帖子

全面实施中继命令 - 它可以应用于所有情况吗?

我正在研究中继命令的完整实现,可以在这里找到

我听说 RelayCommand 背后的想法是拥有一种“通用遥控器”来使用您的所有命令。

如果是这样的话,我在实施方面有两个问题:

1)如果对于某些控件我不想传递参数会发生什么?我一定要吗?我是否需要相应地更改我的执行/可以执行函数以支持这些参数?

2) 如果我不想在 XAML 中传递 CommandParameter 怎么办?如果我想通过使用属性更改或代码中的其他方法来影响控件的更改。我可以在不传递 XAML 中的 CommandParameter 的情况下实现 CanExecute 或 CanExecuteChanged 吗?

到目前为止,我主要实现了部分 RelayCommands,其中 CanExecute 始终返回 true,并且我只是将控件 IsEnabled 绑定到视图模型中的额外属性。这工作得很好,但我想知道 - 完整的实施能为我做什么?

(答案能否给出完整的工作示例?)

c# wpf relaycommand

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

如何对这种方法进行单元测试(使用剪贴板和文件系统)?

我有一个类似于组件的资源管理器,它实际上处理文件系统.如何开始将单元测试编写到这些需要使用剪贴板的方法,以及文件系统中文件的实际移动或复制?

我试过看教程和在线课程,但是它们太抽象了,在我当前的问题上无法真正帮助我.

public void DoCtrlV(object obj)
{
    try
    {
        StopWait();
        var list = System.Windows.Clipboard.GetFileDropList();
        if (list.Count > 0) // i.e. from outside - get file list
        {
            if (!PasteFromOutsideSucceeded(list))
                return;
        }
        else // i.e. from inside
        {
            string targetFolder = GetTargetFolder();

            if (Globals.ListInternalUseCopy != null) // from list
            {
                PasteFromList(targetFolder);
            }
            else if (Globals.TreeInternalUseCopy != null) // from tree
            {
                PasteFromTree(targetFolder);
            }
        }

        RefreshBothControls();
    }
    catch (UnauthorizedAccessException ex)
    {
        // doesn't matter atm
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑/更新:我必须做很多事情,我仍然处于中间位置,但这是我到目前为止所做的.

  1. 我将所有可测试的代码解压缩到一个单独的类中,在窗口之外的代码隐藏之前是它(因为你需要实例化窗口来实际测试).我在构造函数中传递了它运行所需的所有必需对象.

我的DoCtrlV现在看起来像这样:

StopWait(); …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing

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

C前向引用结构 - 1)必须带指针?2)必须初始化?

我正试图在C中转发引用(嵌套)结构.

这意味着我有一个结构,在其中我引用了稍后声明的另一个结构.

如果我将嵌套结构声明为指针,并使用值初始化它,它就可以工作.

以下代码有效:

#include <stdio.h>

struct computer{
    double cost;
    int year;
    char cpu_type[16];
    struct cpu_speed *sp; //this is the question (1)
};

struct cpu_speed{
    int num;
    char type[16];
};

typedef struct computer SC;
typedef struct cpu_speed SS;

void DataR(SC *s);
void DataP(SC *s);

int main(){
   // this is question (2)
    SS speed = {4,"giga"};    
    SC model[2] = {
    { 0,1990, "intel", &speed},
    { 0,1990, "intel", &speed}
    };

    int i;
    for(i=0;i<2;i++) {
        printf("computer no. %d \n", i+1);
        DataR(&model[i]);
    }
    printf("here's …
Run Code Online (Sandbox Code Playgroud)

c struct pointers initialization forward-reference

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

在C中找不到malloc()和calloc()之间的区别(从虚拟机Linux运行)

*注意:这不是一个重复的问题,因为你提到的答案没有回答我的问题.我知道malloc()和calloc()应该做什么,但想知道为什么在将它与虚拟机一起使用时似乎没有什么区别.

我知道应该是什么区别 - malloc()只是为你分配内存,而calloc()用0来初始化它.

问题是,在我的代码中它没有显示,并且malloc()在从我的虚拟机Ubuntu运行时似乎没有任何区别.我运行了几次,malloc就像calloc一样.

注意 - 我刚刚用我的实际硬盘驱动器检查过,它似乎工作正常,我得到了不同的结果.

代码:

#include <stdio.h>
#include <stdlib.h>

int main(){
int i,n;
float *ptr1, *ptr2;
printf("enter a total number of float items: ");
scanf("%d", &n);

ptr1 = malloc(n*sizeof(float));
ptr2 = calloc(n, sizeof(float));

printf("malloc     |    calloc\n");
printf("----------------------\n");
for(i=0;i<n;i++)
printf("%-10f  %10f\n", *(ptr1+i), *(ptr2+i));
printf("\n");
free(ptr1);
free(ptr2);
return 0;
}
Run Code Online (Sandbox Code Playgroud)

c linux malloc virtual-machine calloc

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