我正在开发一个WPF,我需要动态生成16次Checkbox。
XAML:
<Checkboxes Height="14" Command="{Binding CheckboxesGen}" Margin="0" Name="checkBox1" Grid.Column="0" VerticalAlignment="Center" HorizontalAlignment="Center" />
使用上述方法,如果我将这个复选框写下16次并为其单独按下Button命令,效率将会很低。理想情况下,我希望生成它们16次,并在我的viewmodel类中有一个常用方法,如下所示:
private ICommand mCheckboxesGen;
public ICommand CheckboxesGen
{
get
{
if (mCheckboxesGen== null)
mCheckboxesGen= new DelegateCommand(new Action(mCheckboxesGenExecuted), new Func<bool>(mCheckboxesGenCanExecute));
return mCheckboxesGen;
}
set
{
mCheckboxesGen= value;
}
}
public bool mCheckboxesGenCanExecute()
{
return true;
}
public void mCheckboxesGenExecuted(some INDEX parameter which gives me selected Checkboxes )
{
// Have a common method here which performs operation on each Checkboxes click based on INDEX which determines which Checkboxes I have selected
}
我在C ++应用程序中面临同样的情况。我在我的C ++应用程序中完成了以下操作:
for(int j = 0; j < 16; j ++)
{
m_buttonActiveChannels[j] = new ToggleButton();
addAndMakeVisible(m_buttonActiveChannels[j]);
m_buttonActiveChannels[j]->addButtonListener(this);
}
//Checking which Checkboxes is clicked
unsigned bit = 0x8000;
for(int i = 15; i >= 0; i--)
{
if(0 != (value & bit)) //Value has some hardcoded data
{
m_buttonActiveChannels[i]->setToggleState(true);
}
else
{
m_buttonActiveChannels[i]->setToggleState(false);
}
bit >>= 1;
}
因此,使用它会生成16次,并且有一种方法可以根据index i
执行操作。
使用类似的方法或任何其他方法,我如何在我的wpf应用程序中实现它? :) 请帮助:)
答案 0 :(得分:1)
这样的事情怎么样?
<ItemsControl ItemsSource="{Binding CollectionOfObjectsThatRepresentYourCheckBox}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Orientation="Horizontal"
IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemTemplate>
<DataTemplate>
<Checkbox Content="{Binding DisplayText }" Checked="{Binding Checked}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
您需要在加载对象时填充您的集合,或者在执行命令时,您可以对您为其创建的模型中正在检查的项目做出反应..
public class CheckBoxClass
{
public int Index {get; set;}
public string DisplayText {get; set}
private bool _checked;
public bool Checked
{
get { return _checked;}
set {
_checked = value
doSomethingWhenChecked();
}
}
ObservableCollection<CheckBoxClass> CollectionOfObjectsThatRepresentYourCheckBox = SomeMethodThatPopulatesIt();
这是一种更简洁的方法,而不是生成控件,您只需绑定到将由复选框表示的对象列表。
答案 1 :(得分:0)
为复选框定义一个viewmodel,这个类将有一个Index属性和基于它的命令实现。将ObservableCollection复选框视图模型添加到当前viewmodel。在视图中,使用适当的ItemTemplate添加绑定到此集合的ItemsControl。您现在可以在viewmodel中动态添加任意多个复选框。