2017-11-16 11 views
0

전달 된 선택 값을 바인드 된 아이템 소스 목록에서 사용할 수없는 경우 선택한 값을 0으로 설정하려고합니다. 아래에 언급 한 바와 같이전달 된 선택 값을 바인드 된 아이템 소스 목록에서 사용할 수없는 경우 선택된 값을 0으로 설정

종류라는 클래스가있다 :

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> 

을 I는 콤보 및 콤보 선택된 값을 설정 한 속성에 바인딩하는 카테고리의리스트를 준비하고,이 창 뒤끝있다.

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> 

결과

없음 작동하지 않습니다. 콤보 박스에서 아무 것도 선택되지 않았습니다.

+0

CategoryID 모델 내부에 사용하고 있습니다. XAML 내부에서 솔루션을 찾기 위해 일반화되기를 원했습니다. –

답변

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"); 
        } 
    } 
    
  • 변경 카테고리 ID를이

    처럼
    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"); 
        } 
    }