我是一名C ++开发人员,刚开始从事WPF工作。在MVVM之后,我正在开发组合框,我必须在其中添加项目。好吧添加项目似乎很容易,但我遇到一个简单的问题,我无法弄清楚该怎么做。这是代码:
XAML:
<ComboBox Grid.Row="0" ItemsSource="{Binding DaughterBoardBoxList}" SelectedItem="{Binding SelectedDaughterBoardBoxList, Mode=TwoWay}" SelectedIndex="0" />
<ComboBox Grid.Row="1" ItemsSource="{Binding DaughterVersionBoxList}" SelectedItem="{Binding SelectedDaughterVersionBoxList, Mode=TwoWay}" SelectedIndex="0" />
<ComboBox Grid.Row="2" ItemsSource="{Binding DaughterSerialBoxList}" SelectedItem="{Binding SelectedDaughterSerialBoxList, Mode=TwoWay}" SelectedIndex="0" />
ViewModel类:
public ObservableCollection<string> DaughterBoardBoxList
{
get { return _DBoardBoxList; }
set
{
_DBoardBoxList = value;
OnPropertyChanged("DaughterBoardBoxList");
}
}
public string _SelectedDBoardBoxList;
public string SelectedDaughterBoardBoxList
{
get { return _SelectedDBoardBoxList; }
set
{
_SelectedDBoardBoxList = value;
OnPropertyChanged("SelectedDaughterBoardBoxList");
}
}
// Similarly for other 2 comboboxes
我在每个组合框中添加了如下项目:
我已经从1 - 499添加如下:
for (int j = 1; j < 500; j++)
{
_DSerialBoxList.Add(j.ToString());
}
现在执行某些操作时,我需要执行以下几个语句:
String daughterBoard = "S1010015001A0477"; // Hardcoded value for check
String boardName = daughterBoard.Substring(0, 8);
DaughterBoardBoxList = boardName;
String version = daughterBoard.Substring(8, 12);
DaughterVersionBoxList = version;
int serialvalue = Convert.ToInt32(daughterBoard.Substring(12, 16));
String serialNo = Convert.ToString(serialvalue);
DaughterSerialBoxList = serialNo;
longlabel += daughterBoard;
当我执行上面的代码时,它会在String version = daughterBoard.Substring(8, 12);
将Argumentoutofrange. Index and length must refer to a location within the string.
要求:
现在我很困惑如何设置组合框中boardName
,version
和serialNo
中的值,而不必面对任何异常。我认为combobox有settext属性。他们是另一种替代解决方案吗?
即使我输入0到499之间的值,它也应该显示为4位数值,即如果添加了77,它应该显示为0077.正如我在上面的代码中提到的那样。
请帮助:)
答案 0 :(得分:1)
首先,异常即将发生,因为你正走出字符串边界。
String version = daughterBoard.Substring(8, 4)
..就是你所追求的,8号之后没有12个字符。第二个参数是第一个参数所需的长度,而不是开始。
然后检查字符串是否在列表中。
if (DaughterVersionBoxList.Contains(version))
{
SelectedDaughterVersionBoxList = version;
}
设置SelectedDaughterVersionBoxList会将其应用于组合框。
双向绑定,就像您对所选项目所做的那样,是设置列表框中所选项目的最佳方式。
有两种方法可以格式化您想要显示的文本。有时您可以在xaml中使用StringFormat属性。另一种是使用converter。
您的案例中的快捷方式是在填充列表时格式化字符串。
for (int j = 1; j < 500; j++)
{
_DSerialBoxList.Add(j.ToString("D4"));
}
这将确保你的Combobox总能获得4位数字。查看here以获取更多信息。如果情况要求您实际处理列表项作为数值,那么最好将ObservableCollection转换为ObservableCollection并使用我之前提到的转换器。