wpf绑定几个复选框'缺陷到静态列表

时间:2015-08-02 10:16:30

标签: arrays wpf checkbox binding static

这是我发布的问题的第二部分的重新上限,并且理解将两个问题放在一个条目中并不是很好,这里有:

我正在以编程方式创建多个复选框,并使用foreach循环将它们添加到名为myStackPanel的StackPanel中。我可以将其更改为任何其他类型的构造(例如,数组):

foreach (something)
{
    CheckBox newCheckBox = new CheckBox();
    myStackPanel.Children.Add(newcheckBox);
}

此外,还有一个非静态类myClass,其中包含静态属性myStaticList

public class myClass
{
    public static ObservableCollection<bool> myStaticList { get; set; }
}

我想将动态创建的复选框的isChecked绑定到myStaticList。我不知道该怎么做。

请帮忙! TIA

1 个答案:

答案 0 :(得分:1)

如果你想绑定 IsChecked属性,那么你可以在后面的代码中做到这一点:

        for (int i = 0; i < myClass.myStaticList.Count; i++)
        {
            CheckBox newCheckBox = new CheckBox();

            Binding binding = new Binding();
            binding.Path = new PropertyPath(string.Format("[{0}]", i));
            binding.Source = myClass.myStaticList;
            BindingOperations.SetBinding(newCheckBox, CheckBox.IsCheckedProperty, binding);

            myStackPanel.Children.Add(newCheckBox);
        }

<强>更新

另一种解决方案是在XAML中处理这个问题:

    <ItemsControl x:Name="myStackPanel" 
                  ItemsSource="{Binding Source={x:Static local:myClass.myStaticList}}">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <StackPanel Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <CheckBox IsChecked="{Binding Path=., Mode=OneWay}"/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

在此解决方案中,您可以预先将CheckBoxes预先定义为ItemTemplate,并动态添加CheckBox数据,而不是创建动态bool

foreach(something)
{
    myClass.myStaticList.Add(true or false);
}

请注意myStaticList必须在myClass的静态构造函数中实例化:

public class myClass
{
    public static ObservableCollection<bool> myStaticList { get; set; }

    static myClass()
    {
        myStaticList = new ObservableCollection<bool>();
    }
}