在没有数据绑定的情况下使用WPF?

时间:2013-01-22 18:25:59

标签: wpf architecture

我需要创建一个将包含

的.ini文件的应用程序
  • 分钟
  • 最大
  • 默认

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

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

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

2 个答案:

答案 0 :(得分: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。显然,您可以使用扩展{ {1}}允许ItemsControl为每种类型显示不同的数据模板(实际上WPF已经支持每种类型的数据模板)。

我目前正在使用Caliburn.Micro,它实际上为你设置了很多子模板 - 所以如果你创建绑定项目作为VM,你可以做一些简单的事情:

DataTemplateSelector

只要<ItemsControl x:Name="SomeBinding" /> 属性中的子项是VM本身(尽管那是另一个故事:P),CM会处理剩下的事情。

答案 1 :(得分:1)

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