我正在研究中继命令的完整实现,可以在这里找到
我听说 RelayCommand 背后的想法是拥有一种“通用遥控器”来使用您的所有命令。
如果是这样的话,我在实施方面有两个问题:
1)如果对于某些控件我不想传递参数会发生什么?我一定要吗?我是否需要相应地更改我的执行/可以执行函数以支持这些参数?
2) 如果我不想在 XAML 中传递 CommandParameter 怎么办?如果我想通过使用属性更改或代码中的其他方法来影响控件的更改。我可以在不传递 XAML 中的 CommandParameter 的情况下实现 CanExecute 或 CanExecuteChanged 吗?
到目前为止,我主要实现了部分 RelayCommands,其中 CanExecute 始终返回 true,并且我只是将控件 IsEnabled 绑定到视图模型中的额外属性。这工作得很好,但我想知道 - 完整的实施能为我做什么?
(答案能否给出完整的工作示例?)
我有一个类似于组件的资源管理器,它实际上处理文件系统.如何开始将单元测试编写到这些需要使用剪贴板的方法,以及文件系统中文件的实际移动或复制?
我试过看教程和在线课程,但是它们太抽象了,在我当前的问题上无法真正帮助我.
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)
编辑/更新:我必须做很多事情,我仍然处于中间位置,但这是我到目前为止所做的.
我的DoCtrlV现在看起来像这样:
StopWait(); …Run Code Online (Sandbox Code Playgroud) 我正试图在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) *注意:这不是一个重复的问题,因为你提到的答案没有回答我的问题.我知道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 ×2
c# ×2
calloc ×1
linux ×1
malloc ×1
pointers ×1
relaycommand ×1
struct ×1
unit-testing ×1
wpf ×1