首页 > 解决方案 > 绑定Textbox详情时如何避免属性过多

问题描述

我有一个带有 22 个文本框的 mvvm 应用程序。在我的“普通” wpf 应用程序中,我可以列出一个列表,然后将设置更改为所有框,如下所示:

Brush MyBrush = Brushes.LightGray;
            foreach (var a in AllBoxes)
            {
                a.Background = MyBrush;
                a.IsReadOnly = true;
                a.IsTabStop = false;
            }

因此,在 mvvm 中,我需要为每个文本框进行 3 个绑定并创建如下属性:

private Brush _clr2;
        public Brush Clr2
        {
            get { return _clr2; }
            set
            {
                _clr2 = value;
                NotifyOfPropertyChange(() => Clr2);
            }
        }

有没有更简单的方法来做到这一点而不是制作 66 个属性?

标签: mvvmcaliburn.micro

解决方案


您为具有所有绑定的一个 TextBox 创建一个 UserControl...与关联的 ViewModel

<StackPanel>
   <TextBox .... /> 
</StackPanel>

然后使用 ViewModel 的 ObservableCollection 并使用 ItemControl 创建 ParentView:

<ItemsControl ItemsSource="{Binding ListOfTextBox}">

并为您的 ItemsControl 中的项目创建一个项目模板

<DataTemplate>
    <ContentControl cal:View.Model="{Binding}" />
</DataTemplate>

推荐阅读