这是我发布的问题的第二部分的重新上限,并且理解将两个问题放在一个条目中并不是很好,这里有:
我正在以编程方式创建多个复选框,并使用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
答案 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>();
}
}