使用数据绑定处理样式

重写

我有一个接收文件的应用程序。 此文件包含大量可编辑内容。 此内容有多种可能的类型(即布尔复选框,文本框等)。 问题是,这些值可以是单独的,也可以是一个组(最多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:

  1. 一个名字
  2. 选项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 ,但我认为您已经清楚了解该部分。