在动态单选按钮点击时未能将不同项添加到组合框中。
在动态单选按钮点击时未能将不同项添加到组合框中。
我正在开发我的WPF应用程序中的单选按钮和组合框。尽管我是一个C++开发者,但我最近转向了C#。我的应用程序涉及上述组件的动态生成。基本上,我在我的应用程序中创建了4个动态的单选按钮,当点击每个按钮时,我应该向我的组合框中添加不同的项目。以下是代码:
XAML:
FPGARadioWidgetViewModel 类:
public ObservableCollection
public FPGARadioWidgetViewModel()
{
Children = new ObservableCollection
Children.Add(new FPGAViewModel() { RadioBase = "Base 0x0", ID = 0 });
Children.Add(new FPGAViewModel() { RadioBase = "Base 0x40", ID = 1 });
Children.Add(new FPGAViewModel() { RadioBase = "Base 0x80", ID = 2 });
Children.Add(new FPGAViewModel() { RadioBase = "Base 0xc0", ID = 3 });
}
FPGAViewModel 类:
private bool sBaseCheck;
public bool BaseCheck
{
get { return this.sBaseCheck; }
set
{
this.sBaseCheck = value;
AddComboItems();
this.OnPropertyChanged("BaseCheck");
}
}
private ObservableCollection
public ObservableCollection
{
get { return _RegComboList; }
set
{
_RegComboList = value;
OnPropertyChanged("RegComboList");
}
}
private void AddComboItems()
{
int baseRegister = 0x40 * ID;
ObservableCollection
for (int i = 0; i < 0x40; i++)
{
int reg = (i * 8) + baseRegister;
combo[i] = "0x" + reg.ToString("X");
}
RegComboList = new ObservableCollection
OnPropertyChanged("RegComboList");
}
private bool isRegisterItemsVisible = false;
public bool IsRegisterItemsVisible
{
get { return isRegisterItemsVisible; }
set
{
isRegisterItemsVisible = value;
OnPropertyChanged("IsRegisterItemsVisible");
OnPropertyChanged("RegComboList");
}
}
如果你注意到,当点击特定的单选按钮时,它应该根据ID在组合框中添加具有不同值的项目。必须确保只有在点击任何单选按钮时,才会添加该按钮的项目,并且组合框的先前内容应该被清除。我正在尝试使用上面的代码做同样的事情,但是当我调试时,组合框中似乎没有任何内容显示。
请帮帮我 🙂
问题的原因是因为combobox绑定了不同的字符串引用。每次单选按钮点击都会更改项并返回新的列表引用。尝试通过在其中删除现有项,然后添加新项来重用当前的RegComboList。如果这样无法更新combobox,则将绑定设置为RegComboList的双向绑定。
解决方法是在窗口初始化时,将combobox加载初始的5个单词。然后每当用户点击按钮时,将新的一组单词放入列表中,从而更改combobox的内容。需要注意的是在每次更改列表内容之前要清除列表中的项。
在代码中设置了一个MainWindow类,该类实现了INotifyPropertyChanged接口,用于通知属性更改。MainWindow类有一个RegComboList属性,该属性是一个ObservableCollection
GenerateWords方法用于生成单词列表,该方法首先清除RegComboList中的所有项,然后使用正则表达式将输入的字符串拆分成单词,并将指定数量的单词添加到RegComboList中。Skip变量用于跟踪已经生成的单词数量。
Button_Click_1方法用于处理按钮的点击事件,每次点击按钮时会生成一个随机数,并根据该随机数生成相应数量的单词列表。
最后,建议在尝试动态加载之前,先加载一些虚拟文本,以确定问题出现的位置。
以上就是对问题出现的原因及解决方法的整理。
问题原因:在动态单选按钮点击时,无法向组合框中添加不同的项。
解决方法:
1. 将组合框的ItemsSource与选中的单选按钮关联起来。
2. 将ItemsControl更改为使用具有现有DataTemplate的ListBox,通过绑定IsChecked属性到ListBoxItem的IsSelected属性来获取选中的单选按钮。
3. 在包含Children集合的ViewModel中添加一个YourSelectedItem属性,并在构造函数中调用AddComboItems()方法来填充组合框的项。
4. 将AddComboItems()方法中的combo[i] = "0x" + reg.ToString("X");更改为combo.Add("0x" + reg.ToString("X"));。
5. 确保正确设置了OnPropertyChanged("YourSelectedItem")和OnPropertyChanged("RegComboList")。
以上就是关于"Failing to add different items in combobox on dynamic radiobutton click"问题的原因和解决方法。