在WPF应用程序中创建设置视图

4
这个问题可能已经被很多人解决过了,但是经过数小时的研究,我仍然没有找到我要的答案。
我手头有一个名为ExportSettings.settings的文件,其中包含许多设置(布尔值、字符串、整数等),我希望为它们创建一个视图。为此,我创建了一个简单的窗口,放置了标准按钮如OKCancelClose,并将它们链接到一个KeyDown事件,以便用户可以使用Enter/Escape来接受/取消。
我在XAML中创建了所需的CheckboxTextBox等控件,用于我的设置。当ExportSettingsView类启动时,在其构造函数中读取我的设置并为每个控件分配值。以前我直接绑定它们,但这样会导致无法取消更改,因此我放弃了这种方式。当用户单击OK按钮时,我再次为每个设置的每个值分配代码。如果他单击Cancel,则不进行任何分配,窗口将关闭。
我想要像可编辑对象一样的东西来处理我的设置,以避免这种丑陋的方式制作我的SettingsView。
我寻找的一些东西包括:
  • 能够在我的设置中放置一些注释(ToolTip)会很好
  • 使用反射自动生成控件?
  • 避免创建自定义设置类(以及每次应用程序启动/关闭时保存和读取的工作)

这可能是一个起点:链接 - Xaser
创建一个视图模型类,其中包含一堆支持属性。根据设置的数量,完成这个任务不应该超过一个小时。 - Kcvin
使用属性网格怎么样? - pushpraj
如果用户点击取消,属性网格中的更改是否可撤销? @pushpraj - Sturm
默认情况下,当控件失去焦点时,编辑内容不会被发送到绑定属性。但我认为我们可以通过一些技巧来实现这个功能。在我们选择这种方法之前,最重要的是外观。如果您有心目中所需的图片,也许您可以分享给我。我可以为您尝试一下。 - pushpraj
3个回答

4
将问题分解为几个部分来使用MVVM,创建你的窗口并将其与另一个类(ViewModel)绑定,这个类将拥有反映在你的设置文件中的数据的属性。这个类还必须实现INotifyPropertyChanged接口。如果需要的话,它也可以实现EditableObject接口,但实际上是没有必要的。
将你的按钮连接到ViewModel上的命令,以便当用户点击保存时,它会将其属性写入设置文件。
在这种情况下:
- 窗口是你的View - 新类是你的ViewModel - 设置文件是你的模型
这将允许您取消更改,只需在用户点击取消时不写入设置文件即可。
最重要的一点是你不直接绑定到你的设置属性。
如果你想要自动生成视图字段,你将不得不使用属性网格,但是使用MVVM,你的视图是从你的模型中分离出来的,所以从类似文本框等东西转换到属性网格将会很容易。
当你搜索MVVM时,不要被那些使用大量术语的人所迷惑,MVVM是一个非常简单的概念,它归结为三个类:你的View(xaml),ViewModel(视图绑定)和Model(你的数据),就是这样!祝你好运

关于如果用户取消操作时不更新属性的可能性,您认为使用 UpdateSourceTrigger.Explicit 属性怎么样?该属性“仅在调用 UpdateSource 方法时才更新绑定源”,因此您可以在 OK 上调用它,但不能在 Cancel 上调用。(顺便说一句,这是个很好的答案) - heltonbiker
好的,实际上经过一番搜索,我发现了有希望的BindingGroup.BeginEdit(https://msdn.microsoft.com/en-us/library/system.windows.data.bindinggroup.beginedit.aspx)方法... - heltonbiker

-1

-2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接