单击按钮时禁用Itemscontrol组件

时间:2019-06-21 10:23:56

标签: c# wpf

我正在通过mvvm学习wpf。

我的应用程序由以下逻辑组成。

具有一个按钮的窗体,该按钮将在水平控件中添加从Itemcontrol(例如文本框,组合框和富文本框)中选择的组件以及一个单击按钮的按钮。

单击添加按钮时,指定的组件集将动态添加到行信息中。

enter image description here

2)按下添加信息按钮后,数据将被插入表中。

3)问题是单击添加信息按钮后,items控件中的组件应为只读。这是我目前正在苦苦挣扎的地方。

Model.cs:

  public class textboxModel
    {
        public string Text { get; set; }
        public string lblText { get; set; }
        public string isactive { get; set; }

        public bool txtboxreadonly { get; set; }

    }


    public class ButtonDataModel
    {
        public string Content { get; set; }

        public ICommand Command { get; set; }

        public string column { get; set; }

        public string isactive { get; set; }

        public bool buttreadonly { get; set; }


    }

ViewModel.cs:

public class viewmodel : notifyproperties
    {


        public Relaycommand Status { get; set; }
        public Relaycommand AddCommand { get; set; }


        public labelconversionOnPauseButtonclick pauseclick = new labelconversionOnPauseButtonclick();
        public auditinformation auditid = new auditinformation();
        public ButtonDataModel bdm = new ButtonDataModel();

        public auditinformation adt
        {
            get { return auditid; }
            set
            {
                if (value != auditid)
                {
                    auditid = value;
                    OnPropertyChanged("adt");
                }
            }
        }

        public labelconversionOnPauseButtonclick res
        {
            get { return pauseclick; }
            set
            {
                if (value != pauseclick)
                {
                    pauseclick = value;
                    OnPropertyChanged("res");
                }
            }
        }



        public viewmodel()
        {
            Status = new Relaycommand(pauseclick.Statusdata);
            AddCommand = new Relaycommand(o => auditid.addcommand());

        }


    }
public class auditinformation : notifyproperties
{

    public Relaycommand Command { get; set; }


    private string _lines;
    public string Lines
    {
        get { return this._lines; }
        set
        {
            this._lines = value;

            this.OnPropertyChanged("Lines");
        }
    }


    private readonly ObservableCollection<ButtonDataModel> _MyDatabutton = new ObservableCollection<ButtonDataModel>();
    public ObservableCollection<ButtonDataModel> MyData { get { return _MyDatabutton; } }

    private readonly ObservableCollection<textboxModel> _MyDatatxtbox = new ObservableCollection<textboxModel>();
    public ObservableCollection<textboxModel> MyDatatxtbox { get { return _MyDatatxtbox; } }

    private readonly ObservableCollection<LabelDataModel> _MyDataLabel = new ObservableCollection<LabelDataModel>();
    public ObservableCollection<LabelDataModel> MyDataLabel { get { return _MyDataLabel; } }


    public void addcommand()
    {



 int num= 1;
  for (int i = 0; i < num; i++)
  {
      MyDatatxtbox.Add(new textboxModel
      {

          isactive = "1",

      });

      MyData.Add(new ButtonDataModel
      {

            Command = new Relaycommand(o => search()),
            Content = "Add info",
            isactive = "1",

      });


  }

        }


        public void search( )
        {

            var asss = MyDatatxtbox.Where(a=> a.isactive == "1").Select(a => a.Text);

            var itemstoremove = MyDatatxtbox.Where(i => i.isactive == "1").ToList();

            foreach (var s in asss)
            {
                foreach (var a in itemstoremove)
                {
                    if (a.isactive == "1")
                    {
                        MessageBox.Show(s);
                        buttreadonly = true;
                    }
                }        
            }

         //   var itemstoremove = MyDatatxtbox.Where(i => i.isactive == "1").ToList();

            foreach(var a in itemstoremove)
            {

                a.isactive = "0";


            }

            //foreach (var a in itemstoremove)
            //{

            //    a.txtboxreadonly = true;

            //}

        //    var itemstoremovebutton = MyData.Where(i => i.isactive == "1").ToList();

        //    foreach (var a in itemstoremovebutton)
        //    {
        ////        MyData.Remove(a);
        //        a.isactive = "0";
        //    }




        }

    }

window.xaml:

   <GroupBox   Header="Audit Information"  Grid.Row="1">
                        <Grid >
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>

                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="0" Text="Member ID"></TextBlock>
                            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="1" Width="85" ></TextBox>

                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="2" Text="Claim Number"></TextBlock>
                            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="3" Width="85"  ></TextBox>

                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="4" Text="Date Audited"></TextBlock>
                            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="5" Width="85"  ></TextBox>


                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="6" Text="Query ID"></TextBlock>
                            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="7" Width="85" ></TextBox>

                            <TextBlock HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="8" Text="Audit ID"></TextBlock>
                            <TextBox HorizontalAlignment="Center" VerticalAlignment="Center" Grid.Column="9" Width="85" ></TextBox>


                            <Button HorizontalAlignment="Center" VerticalAlignment="Center"  Width="85" Height="25" Command="{Binding AddCommand}" Content="Add" Grid.Column="10"></Button>


                        </Grid>
                    </GroupBox>
                <GroupBox Grid.Row="2"  Margin="0,0,0,0" Header="Line Information" >
                    <ScrollViewer  HorizontalScrollBarVisibility="Disabled" VerticalScrollBarVisibility="Auto">

                        <Grid>
                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="3.2*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="1.8*"/>
                                <ColumnDefinition Width="*"/>
                                <ColumnDefinition Width="*"/>
                            </Grid.ColumnDefinitions>
                            <Grid.RowDefinitions>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="*"/>
                                <RowDefinition Height="*"/>
                            </Grid.RowDefinitions>

                            <StackPanel Height="22" Grid.Column="0">
                                <Label  HorizontalAlignment="Center" Content="DOS"  />
                            </StackPanel>

                            <ItemsControl   Grid.Column="0" Grid.Row="1"  ItemsSource="{Binding adt.MyDatatxtbox}">

                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0,0,0,50">

                                            <TextBox  IsReadOnly="{Binding txtboxreadonly}"  Text="{Binding Text, Mode=TwoWay}" Height="25" Width="85"   />

                                        </StackPanel>
                                    </DataTemplate>

                                </ItemsControl.ItemTemplate>
                            </ItemsControl>


                            <StackPanel Height="22"  Grid.Column="1">
                                <Label  HorizontalAlignment="Center" Content="CPT"  />
                            </StackPanel>

                            <ItemsControl   Grid.Column="1" Grid.Row="1" ItemsSource="{Binding adt.MyDatatxtbox}">

                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0,0,0,50">

                                            <TextBox  IsReadOnly="{Binding txtboxreadonly}" Margin="0,0,30,0" Text="{Binding Text, Mode=TwoWay}" Height="25" Width="85"   />

                                        </StackPanel>
                                    </DataTemplate>

                                </ItemsControl.ItemTemplate>
                            </ItemsControl>




                            <StackPanel Height="22"  Grid.Column="2">
                                <Label  HorizontalAlignment="Right" Content="Open-close Modifier" Margin="0,0,-17,0" Width="121"  />
                            </StackPanel>

                            <ItemsControl   Grid.Column="2" Grid.Row="1" ItemsSource="{Binding adt.MyDatatxtbox}">

                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0,0,0,50">

                                            <TextBox  IsReadOnly="{Binding txtboxreadonly}" Margin="0,0,30,0" Text="{Binding Text, Mode=TwoWay}" Height="25" Width="85"   />

                                        </StackPanel>
                                    </DataTemplate>

                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                            <StackPanel Height="22"  Grid.Column="3">
                                <Label  HorizontalAlignment="Center" Content="Comments"  />
                            </StackPanel>

                            <ItemsControl   Grid.Column="3" Grid.Row="1" ItemsSource="{Binding adt.MyDatatxtbox}">

                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0,0,0,10">

                                            <RichTextBox   IsReadOnly="{Binding txtboxreadonly}" Margin="0,0,0,0"  Height="65" Width="425"   />

                                        </StackPanel>
                                    </DataTemplate>

                                </ItemsControl.ItemTemplate>
                            </ItemsControl>

                            <StackPanel Height="22"  Grid.Column="4">
                                <Label  HorizontalAlignment="Center" Content="Line Status"  />
                            </StackPanel>

                            <ItemsControl   Grid.Column="4" Grid.Row="1" ItemsSource="{Binding adt.MyDatatxtbox}">

                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="10,0,0,50">

                                            <ComboBox  IsEnabled= "{Binding txtboxreadonly}" Margin="0,0,0,0"  Height="25" Width="95"   >
                                                <ComboBoxItem  Content="Coffie"></ComboBoxItem>
                                                <ComboBoxItem Content="Tea"></ComboBoxItem>
                                            </ComboBox>
                                        </StackPanel>
                                    </DataTemplate>

                                </ItemsControl.ItemTemplate>
                            </ItemsControl>


                            <StackPanel Height="22"  Grid.Column="5">
                                <Label  HorizontalAlignment="Center" Content="Additional Comments"  />
                            </StackPanel>

                            <ItemsControl   Grid.Column="5" Grid.Row="1" ItemsSource="{Binding adt.MyDatatxtbox}">

                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0,0,0,10">

                                            <RichTextBox  IsReadOnly="{Binding txtboxreadonly}" Margin="0,0,0,0"  Height="65" Width="425"   />

                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                            <ItemsControl   Grid.Column="6" Grid.Row="1" ItemsSource="{Binding adt.MyData}">
                                <ItemsControl.ItemTemplate>
                                    <DataTemplate>
                                        <StackPanel  Margin="0,0,0,50">
                                            <Button  Margin="0,0,0,0"  Height="25" Width="55"  Content="{Binding Content}"  Command="{Binding Command}" >

                                            </Button>
                                        </StackPanel>
                                    </DataTemplate>
                                </ItemsControl.ItemTemplate>
                            </ItemsControl>
                        </Grid>
                    </ScrollViewer>
                </GroupBox>
            </Grid>
        </Grid>
    </TabItem>
</TabControl>

所以问题是如何在单击添加信息按钮时禁用/只读行信息,文本框和cpt。

1 个答案:

答案 0 :(得分:0)

肮脏的方法是在ViewModel中添加一个“全局” bool属性,并将其绑定到Controls IsEnabled / ReadOnly属性。