使用数据绑定处理样式
重写
我有一个接收文件的应用程序。 此文件包含大量可编辑内容。 此内容有多种可能的类型(即布尔复选框,文本框等)。 问题是,这些值可以是单独的,也可以是一个组(最多8个),因此它们可以是数组。 我们将这些值绑定到ListView
,并使用DataTemplates
显示它们。 实际上,我从数组列表中创建了ListView
。
这些数组中的项需要是数据绑定和正确设置样式(例如,布尔数组需要创建复选框,而字符串数组需要文本框)。 每个创建的元素都需要放入ListView
的列中。 当前样式使用DataTemplates
与数据绑定,即
对输入数组中的每个值重复此操作,因此您有Value[1]
, Value[2]
等。
这意味着重复几乎相同的代码8次,然后对下一种类型执行相同的操作。 由于存在大量输入类型,这意味着重复代码的数量是荒谬的。
我的问题是: 有没有更好的方法来做到这一点,所以我们不必重复数据模板,同时继续使用列?
顺便说一句,我使用的是.NET 3.5。
行如何显示的示例。 每个元素都在自己的列中。 combobox是从arrays构建的。
编辑示例DataTemplate:
示例图:
我有一个ViewModel。 此ViewModel具有List,由ItemData组成。 ItemDataData有一个名为Values的数组。 List已绑定到View。 我们需要根据我们访问的ItemData的属性选择要使用的DataTemplate:
- 一个名字
- 选项arrray中的一个或多个。
目前,我们在ListView中显示List。 生成ListView
,列具有附加到其CellTemplate
的不同DataTemplates
,每个索引一个,总共8个DataTemplates。
我的答案专注于你的话: 由于存在大量的输入类型,这意味着重复的代码量是荒谬的。
代码重用:
由于您在Item template
需要为不同的DataTypes
定义不同类型的控件,因此无法完全减少代码。 我的意思是如果你想要TextBox
for String
type或Checkbox
for Bool
type那么代码不能明显减少。 但是你可以减少的是为不同的template
一次又一次地定义Binding
语法,正如我在TextBox
Template
示例中看到的那样。 您可以定义Biniding
一次,然后使用n个数字(在您的情况下为8)控件中一次又一次地重复使用它们。 以下是您的操作方法:
public class BindingResourceExtension : StaticResourceExtension { public BindingResourceExtension() : base() { } public BindingResourceExtension(object resourceKey) : base(resourceKey) { } public override object ProvideValue(IServiceProvider serviceProvider) { var binding = base.ProvideValue(serviceProvider) as BindingBase; if (binding != null) return binding.ProvideValue(serviceProvider); else return null; //or throw an exception } }
XAML
(...)
因此可以实现一些代码重用(使用大型复杂bindings
对代码进行映像)。 在您发布问题后,我正在搜索这样的内容,因此我发布了另一个绑定重用问题 ,这有帮助。 此外,由于Bindings
将集中化,因此很容易更新。
ItemTemplate中:
除了你的代码重用问题,你可以使用嵌套的ItemsControl
因为通过查看我可以看到的类digram,并在另一个答案中建议:
现在对于内部ItemsControl
您必须实际定义Templates
,但我认为您已经清楚了解该部分。