C# 无法在WPF中使用字符串变量存储combobox项 我是C++开发人员,刚刚开始工作WPF。在MVVM之后,我正在处理组合框,我必须在其中添加项目。在其中添加项目似乎很容易,但我遇到了一个简单的问题,我不知道该怎么做。代码如下:

C# 无法在WPF中使用字符串变量存储combobox项 我是C++开发人员,刚刚开始工作WPF。在MVVM之后,我正在处理组合框,我必须在其中添加项目。在其中添加项目似乎很容易,但我遇到了一个简单的问题,我不知道该怎么做。代码如下:,c#,.net,wpf,mvvm,combobox,C#,.net,Wpf,Mvvm,Combobox,XAML: <ComboBox Grid.Row="0" ItemsSource="{Binding DaughterBoardBoxList}" SelectedItem="{Binding SelectedDaughterBoardBoxList, Mode=TwoWay}" SelectedIndex="0" /> <ComboBox Grid.Row="1" ItemsSource="{Binding DaughterVersionBoxList}" SelectedI

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" />
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
当我执行上述代码时,它在
String version=daughterBoard.Substring(8,12)处抛出异常作为
Argumentoutofrange。索引和长度必须引用字符串中的位置。

要求:

  • 现在,我感到困惑的是如何设置组合框中的
    boardName
    version
    serialNo
    中的值,而不必面对任何异常。我认为combobox没有settext属性。它们是否是实现这一目标的另一种替代方案

  • 即使我输入0到499之间的值,它也应该显示为4位数字的值,即如果加上77,它应该显示为0077。正如我在上面的代码中提到的


请帮助:)

首先,异常即将出现,因为您正在跳出字符串边界

String version=daughterBoard.Substring(8,4)

…就是你要找的,8号之后没有12个字符了。第二个参数是从第一个参数开始所需的长度,而不是起点

然后检查字符串是否在列表中

if (DaughterVersionBoxList.Contains(version))
{
     SelectedDaughterVersionBoxList = version;
}
for (int j = 1; j < 500; j++)
{
      _DSerialBoxList.Add(j.ToString("D4"));
} 
设置SelectedDaughtServersOnBoxList将其应用于组合框

双向绑定(正如您对所选项所做的那样)是设置列表框的所选项的最佳方式

有几种方法可以格式化要显示的文本。有时可以在xaml中使用该属性。另一种是使用一个

在您的情况下,快捷方式是在填充列表时格式化字符串

if (DaughterVersionBoxList.Contains(version))
{
     SelectedDaughterVersionBoxList = version;
}
for (int j = 1; j < 500; j++)
{
      _DSerialBoxList.Add(j.ToString("D4"));
} 
for(int j=1;j<500;j++)
{
_添加(j.ToString(“D4”);
} 

这将确保您的组合框中始终有4位数字。寻找更多关于它的信息。如果情况要求您实际将列表项作为数值进行处理,那么最好将ObservableCollection转换为ObservableCollection,并使用我前面提到的转换器。

首先,由于您正在跳出字符串边界,所以会出现异常

String version=daughterBoard.Substring(8,4)

…就是你要找的,8号之后没有12个字符了。第二个参数是从第一个参数开始所需的长度,而不是起点

然后检查字符串是否在列表中

if (DaughterVersionBoxList.Contains(version))
{
     SelectedDaughterVersionBoxList = version;
}
for (int j = 1; j < 500; j++)
{
      _DSerialBoxList.Add(j.ToString("D4"));
} 
设置SelectedDaughtServersOnBoxList将其应用于组合框

双向绑定(正如您对所选项所做的那样)是设置列表框的所选项的最佳方式

有几种方法可以格式化要显示的文本。有时可以在xaml中使用该属性。另一种是使用一个

在您的情况下,快捷方式是在填充列表时格式化字符串

if (DaughterVersionBoxList.Contains(version))
{
     SelectedDaughterVersionBoxList = version;
}
for (int j = 1; j < 500; j++)
{
      _DSerialBoxList.Add(j.ToString("D4"));
} 
for(int j=1;j<500;j++)
{
_添加(j.ToString(“D4”);
} 

这将确保您的组合框中始终有4位数字。寻找更多关于它的信息。如果情况要求您实际将列表项作为数值进行处理,那么您最好将ObservableCollection转换为ObservableCollection,并使用我前面提到的转换器。

即使我将适当的语法设置为:
String version=daughterBoard.Substring(8,4)
它抛出一个错误,
无法将字符串转换为observablecollection
,因为我的组合框是string类型。如果您注意到
boardName
中存在值,
version
serialNo
与组合框开头的项目类似。我假设您的绑定工作正常,并且对象实际上在您的组合框中。如果是,则应设置“SelectedDaughtServersOnboxList=version;”好吧,这就像一个符咒:)现在如何格式化组合框中的项目?我说的是我的第二个查询:)这是我如何完成填充的:
\u DSerialBoxList.Add(j.ToString().PadLeft(4,'0'):)很好,尽管我将适当的语法设置为:
String version=daughterBoard.Substring(8,4)
它抛出一个错误,
无法将字符串转换为observablecollection
,因为我的组合框是string类型。如果您注意到
boardName
中存在值,
version
serialNo
与组合框开头的项目类似。我假设您的绑定工作正常,并且对象实际上在您的组合框中。如果是,则应设置“SelectedDaughtServersOnboxList=version;”好吧,这就像一个符咒:)现在如何格式化组合框中的项目?我说的是我的第二个查询:)这是我如何完成填充的:
\u DSerialBoxList.Add(j.ToString().PadLeft(4,'0'):)