0

我需要创建一个应用程序,它将采用一个 .ini 文件,该文件将包含

  • 分钟
  • 最大限度
  • 默认

元素的值,允许用户编辑这些值并保存一个新的 .ini 文件。由于 .ini 文件不能包含指定组中的不同元素,因此需要动态生成 GUI。从我所读到的关于 WPF 的内容中,它主要体现在数据绑定和通知属性更改上。

由于我的视图模型需要容纳不同数量的变量,因此我无法绑定到属性,因此我计划将一个事件处理程序附加到所有文本框,当 TextBox 失去焦点或 Enter 时,它将选择相应的验证规则被按下。之后,如果它通过验证,它应该相应地更新模型,并使用模型更新视图以获得相应的值。

我想知道这听起来是否是一个有效的想法,是否有类似的设计模式我应该阅读或者我应该完全远离 WPF?

4

2 回答 2

2

您仍然可以使用绑定 - 因为 WPF 支持项目模板,并且由于您使用的是 MVVM 模式,您只需为列表中的每个子项目创建一个 VM(您甚至不需要这样做,您可以直接在每个列表项的模板到 DTO 或业务对象)

我现在正在做类似的事情 - 我有一个客户的材料测试列表,他们希望对每种材料进行可变数量和类型的测试,但也能够为他们的每个订单调整和更改这些测试顾客

他们实际上有两种测试类型,但为了描述这两种情况中更简单的一种(不需要子虚拟机本身),我刚刚创建了一个ItemsControl具有项目模板的项目:

<ItemsControl ItemsSource="{SomeBinding}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{PropertyDescription}" />
                <TextBox Text="{PropertyValue}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

在这种情况下,模型只包含一个属性名称/值列表并将它们显示在堆栈面板中(您可能需要ItemPanel使用ItemsPanelTemplate. WPF 已经支持每种类型的数据模板)。ItemsControlDataTemplateSelector

我目前正在使用 Caliburn.Micro 它实际上为您设置了很多子模板 - 因此,如果您将绑定项目创建为 VM,您可以执行以下简单操作:

<ItemsControl x:Name="SomeBinding" />

只要SomeBinding属性中的子项是虚拟机本身,CM 就会负责其余的工作(尽管这是另一回事:P)

于 2013-01-22T18:41:15.550 回答
1

使用实现INotifyPropertyChanged的​​类包装此库,以便 WPF 可以在属性更改后自行更新。这样您就可以有效地将数据绑定到 INI 文件。

于 2013-01-22T18:29:45.587 回答