我试图学习WPF和MVVM的问题,但遇到了一个麻烦。 这个问题是相似的,但不完全相同,这个(处理对话框在WPF,与mvvm) … 我有一个使用MVVM模式编写的“登录”表单。 这个表单有一个ViewModel,它保存着用户名和密码,这些用户名和密码被绑定到XAML中使用普通数据绑定的视图。 它还有一个“登录”命令,绑定到表单上的“登录”按钮,使用普通的数据绑定。 当“Login”命令触发时,它调用ViewModel中的一个函数,该函数关闭并通过网络发送数据以进行登录。当此函数完成时,有两个操作: 登录无效 – 我们只是显示一个MessageBox,一切正常 登录是有效的,我们需要关闭登录表单,并返回true作为其DialogResult … 问题是,ViewModel对实际的视图一无所知,所以怎么关闭视图并告诉它返回一个特定的DialogResult? 我可以在CodeBehind中粘贴一些代码,并且/或者将视图传递给ViewModel,但是这看起来好像会彻底击败MVVM的全部… 更新 最后,我刚刚违反了MVVM模式的“纯度”,并让View发布了一个Closed事件,并公开了一个Close方法。 ViewModel然后会调用view.Close 。 该视图只有通过一个接口才知道,并通过一个IOC容器连接起来,所以没有可测试性或可维护性的损失。 接受的答案是-5票,这似乎相当愚蠢! 虽然我很清楚自己在“纯”的时候解决问题的好感,但我并不是唯一一个认为200行事件,命令和行为只是为了避免单行“模式”和“纯度”的名字有点荒谬….
我一直在使用C ++,我一直在想新的关键字。 简单地说,我应该使用它,还是不? 1)使用新的关键字… MyClass* myClass = new MyClass(); myClass->MyField = "Hello world!"; 2)没有新的关键字… MyClass myClass; myClass.MyField = "Hello world!"; 从实现的角度来看,他们似乎没有什么不同(但我确定他们是)…但是,我的主要语言是C#,当然第一种方法是我习惯的。 难度似乎是方法1更难与std C ++类一起使用。 我应该使用哪种方法? 更新1: 我最近使用新的关键字堆内存(或自由存储 )为超出范围的大数组(即从函数返回)。 在我使用堆栈之前,导致一半的元素在范围之外被破坏,切换堆使用确保了元素的完整性。 好极了! 更新2: 我的一个朋友最近告诉我,使用new关键字有一个简单的规则。 每次键入new ,输入delete 。 Foobar *foobar = new Foobar(); delete foobar; // TODO: Move this to the right place. 这有助于防止内存泄漏,因为你总是必须把删除的地方(即当你剪切和粘贴到一个析构函数或其他)。
我似乎无法使本地化工作。 我有一个类库。 现在我想在那里创建resx文件,并返回一些基于线程文化的值。 我怎样才能做到这一点?
我在C中与size_t混淆。我知道它是由sizeof运算符返回的。 但究竟是什么呢? 这是一种数据类型吗? 假设我有一个for循环: for(i = 0; i < some_size; i++) 我应该用int i; 或size_t i; ?
在某些情况下,是否有任何令人信服的性能原因来选择通过动态链接进行静态链接,反之亦然? 我听过或读过以下内容,但是我对这个问题的认识还不够充分。 1)静态链接和动态链接之间的运行时性能差异通常可以忽略不计。 2)(1)如果使用分析编译器使用配置文件数据来优化程序热路径,因为使用静态链接,编译器可以优化代码和库代码。 通过动态链接,只有你的代码可以被优化。 如果大部分时间用于运行库代码,这可能会产生很大的差异。 否则,(1)仍然适用。
完整的例子: #include <stdio.h> void test(int arr[]) { int arrSize = (int)(sizeof(arr) / sizeof(arr[0])); printf("%d\n", arrSize); // 2 (wrong?!) } int main (int argc, const char * argv[]) { int point[3] = {50, 30, 12}; int arrSize = (int)(sizeof(point) / sizeof(point[0])); printf("%d\n", arrSize); // 3 (correct 🙂 ) test(point); return 0; } 在传递给函数之前,sizeof给了我正确的值。 在函数完全相同的数组上做同样的事情给出奇怪的结果。 有一个元素缺失。 为什么?
我的程序都写了一个像这样的颜色读取阵列: struct Image { size_t width; size_t height; struct Color *data; } struct Color { char r; char g; char b; } 我怎样才能在C屏幕上显示这样的数组?
我正在尝试使用Entity Frameworkm填充一个GridView但每当我得到以下错误: 对象'COSIS_DAL.MemberLoan'上的属性访问器'LoanProduct'抛出以下异常:ObjectContext实例已被处置,不能再用于需要连接的操作。 我的代码是: public List<MemberLoan> GetAllMembersForLoan(string keyword) { using (CosisEntities db = new CosisEntities()) { IQueryable<MemberLoan> query = db.MemberLoans.OrderByDescending(m => m.LoanDate); if (!string.IsNullOrEmpty(keyword)) { keyword = keyword.ToLower(); query = query.Where(m => m.LoanProviderCode.Contains(keyword) || m.MemNo.Contains(keyword) || (!string.IsNullOrEmpty(m.LoanProduct.LoanProductName) && m.LoanProduct.LoanProductName.ToLower().Contains(keyword)) || m.Membership.MemName.Contains(keyword) || m.GeneralMasterInformation.Description.Contains(keyword) ); } return query.ToList(); } } protected void btnSearch_Click(object sender, ImageClickEventArgs e) […]
是否有可能传递一个lambda函数作为函数指针? 如果是这样,我必须做错误的东西,因为我得到一个编译错误。 考虑下面的例子 using DecisionFn = bool(*)(); class Decide { public: Decide(DecisionFn dec) : _dec{dec} {} private: DecisionFn _dec; }; int main() { int x = 5; Decide greaterThanThree{ [x](){ return x > 3; } }; return 0; } 当我尝试编译这个 ,我得到以下编译错误: In function 'int main()': 17:31: error: the value of 'x' is not usable in […]
我需要产生一个控制台应用程序的子进程,并捕获它的输出。 我写了一个方法的以下代码: string retMessage = String.Empty; ProcessStartInfo startInfo = new ProcessStartInfo(); Process p = new Process(); startInfo.CreateNoWindow = true; startInfo.RedirectStandardOutput = true; startInfo.RedirectStandardInput = true; startInfo.UseShellExecute = false; startInfo.Arguments = command; startInfo.FileName = exec; p.StartInfo = startInfo; p.Start(); p.OutputDataReceived += new DataReceivedEventHandler ( delegate(object sender, DataReceivedEventArgs e) { using (StreamReader output = p.StandardOutput) { retMessage […]