如果传递的选定值在绑定的项目源列表中不可用,则将所选值设置为0

时间:2017-11-16 11:32:32

标签: c# wpf combobox

我想在绑定的项目资源列表中传递选定的值时将所选值设置为0。

如下所述,有一个名为Category的类:

public class Category
{
   private long _CategoryID;
   public long CategoryID
   {
       get
       {
           return _CategoryID;
       }
       set
       {
           _CategoryID = value;
       }
   }
   private string _CategoryName;
   public string CategoryName
   {
       get
       {
           return _CategoryName;
       }
       set
       {
           _CategoryName = value;
       }
   }
}

窗口内有一个窗口和一个组合框。组合框的定义如下:

<ComboBox  Name="cbCagtegory" TabIndex="7" ItemsSource="{Binding CategoriesList}" SelectedValuePath="CategoryID" DisplayMemberPath="CategoryName" SelectedValue="{Binding Path=CategoryID}">
</ComboBox>

在这个窗口的后端,我准备了一个与combobox绑定的类别列表和一个用于设置组合框选择值的属性。

List<Category> CategoriesList= new List<Category>();

private long _CategoryID;
public long CategoryID
{
   get
   {
      return _CategoryID;
   }
   set
   {
      _CategoryID = value;
      RaisePropertyChanged("CategoryID");
   }
}

现在让我们说,CategoriesList包含两个记录。

a. CategoryID=0, CategoryName='Category1'
b. CategoryID=1, CategoryName='Category2'
c. CategoryID=2, CategoryName='Category3'

问题

如果我将CategoryId属性值设置为5.组合框中没有选择任何内容。 此时我想将CategoryID = 0设置为选定值。 我想在XAML中实现这一目标。

到目前为止我尝试了什么。

1.Assigned FallBackValue=0 as below
 <ComboBox  Name="cbCagtegory" TabIndex="7" ItemsSource="{Binding CategoriesList}" SelectedValuePath="CategoryID" DisplayMemberPath="CategoryName" SelectedValue="{Binding Path=CategoryID,FallBackValue=0}">
</ComboBox>

2. Assigned TargetNullValue=0 as below
<ComboBox  Name="cbCagtegory" TabIndex="7" ItemsSource="{Binding CategoriesList}" SelectedValuePath="CategoryID" DisplayMemberPath="CategoryName" SelectedValue="{Binding Path=CategoryID,TargetNullValue=0}">
</ComboBox>

结果

他们都没有奏效。在组合框中没有选择任何东西。

1 个答案:

答案 0 :(得分:0)

我会这样做:

  • 以这种方式更改xaml中的组合框

    <ComboBox  Name="cbCagtegory" TabIndex="7" ItemsSource="{Binding CategoriesList}"  DisplayMemberPath="CategoryName" SelectedItem="{Binding Selection}">
    </ComboBox>
    
  • 添加此属性

    private Category comboSelection;
    public Category ComboSelection
    {
        get
        {
            return ComboSelection;
        }
        set
        {
            ComboSelection= value;
            RaisePropertyChanged("ComboSelection");
        }
    }
    
  • 像这样更改CategoryID

    private long _CategoryID;
    
    public long CategoryID
    {
        get
        {
            return _CategoryID;
        }
        set
        {
            _CategoryID = value;
            if((int)CategoryID > CategoriesList.Count -1)
            {ComboSelection= CategoriesList[0];}
            else
            {ComboSelection= CategoriesList[(int)CategoryID ];
             _CategoryID = 0;}
            RaisePropertyChanged("CategoryID");
        }
    }