检查一大组复选框

Tom*_*tts 0 c# wpf checkbox xaml

我希望能够说:

获取第一个文本块,然后是第一个复选框,其名称中的数字为1.

然后,如果选中该复选框,则可以填充文本块.

看代码:

     for (int i = 1; i < 10; i++)
        {

            TextBlock a = (this.FindName(string.Format("tb_{0}", i)) as TextBlock);
            CheckBox b = (this.FindName(string.Format("ck_{0}", i)) as CheckBox);
            if (b.IsChecked.HasValue)
            {
            if (a != null) a.Text = data.ArrayOfSensors[i].ToString();
            }
            else
            {
                if (a != null) a.Text = data.ArrayOfSensors[0].ToString();
            }

        }
Run Code Online (Sandbox Code Playgroud)

因此,当启用该复选框时,将使用数组中的索引填充文本块.

非常感谢!

编辑:稍微好一点的解释:

文本块命名为:tb_1,tb_2等

复选框命名为:cb_1,cb_2等

该数组是:

[0] 0

[1] 100

[2] 150

这个数字是他们所有人的共同点.所以我可以使用for循环,将i作为每个的公共变量.我还有大约50个文本框和组合框,并且不想单独写出每个文本框和组合框.

编辑:我的ComboBoxes和Textblocks是在Xaml代码上创建的,如下所示:

   <CheckBox x:Name="Cb_1" Width="15" Height="15" Margin="349,53,127,164" IsChecked="True" />

   <TextBlock x:Name="tb_1" Text="80" Height="20" Width="20" Margin="266,35,205,177" />
Run Code Online (Sandbox Code Playgroud)

Rac*_*hel 7

如果没有看到你的XAML看起来很难回答它,但听起来你可能会尝试使用像WinFirms这样的WPF.

要在WPF中构建这样的接口,首先应创建一个自定义类来保存数据,然后使用a ItemsControl来呈现数据集合.

例如,您的类可能看起来像这样

public class SensorData() : INotifyPropertyChanged
{
    // should implement INotifyPropertyChanged of course
    public string Text { get; set; }
    public bool IsChecked { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且ObservableCollection<SensorData>可能使用呈现一个<ItemsControl>具有ItemsPanelTemplate同时包含CheckBoxTextBox

<ItemsControl ItemsSource="{Binding MyCollectionOfSensorData}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <CheckBox Checked="{Binding IsChecked}" />
                <TextBlock Text="{Binding Text}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>
Run Code Online (Sandbox Code Playgroud)

这将遍历SensorData对象集合,并为每个对象呈现CheckBox和TextBox.如果要对代码隐藏中的数据进行任何操作,则只需要修改SensorData对象的属性.

例如,你可以有一个循环

for (int i = 0; i < MyCollectionOfSensorData.Length; i++)
{
    SensorData item = MyCollectionOfSensorData[i];

    if (item.IsChecked)
        item.Text = data.ArrayOfSensors[i].ToString();
    else
        item.Text = "0";
}
Run Code Online (Sandbox Code Playgroud)

并且根本不会与UI对象进行交互.