2014-10-15 3 views
1

우리는 이중 언어 응용 프로그램에서 WPF Combobox와 분투하고 있습니다. 콤보 박스를 컬렉션에 바인딩했습니다. 컬렉션의 값을 다른 언어로 된 해당 문자열 값으로 대체하는 버튼이 있습니다. 문제점 : 드롭 다운 목록에서 값을 선택합니다. 언어를 변경하려면 버튼을 눌러 표시된 값이 이전 언어로 유지되지만 드롭 다운이 삭제되면 in의 값이 올바른 언어로 대체됩니다.WPF Combobox 표시 값이 업데이트되지 않습니다.

<ComboBox x:Name="ProjectClassComboBox" 
        Width="150" 
        ItemsSource="{Binding Path=ProjectClassCollection}" 
        DisplayMemberPath="Name" 
        SelectedValuePath="Id" 
        SelectedValue="{Binding Path=RegionContext.CurrentItem.ClassNomenclatureId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

업데이트 : 여기 내 XAML이다이 코멘트에 요구하기 때문에 내가 ObservableCollection에에서 파생 된 우리의 사용자 정의 클래스, 즉 매우 복잡한입니다 collectionis를 추가해야합니다. 컬렉션 항목은 INotifyPropertyChanged를 구현해야하며 컬렉션에는 각 항목의 PropertyChanged 이벤트에 대한 수신기가 있습니다.

드롭 다운 목록 및 선택한 항목 값이 업데이트 될 때 표시되는 콤보의 텍스트가 업데이트되지 않은 것처럼 보입니다.

+0

우리에게 더 많은 코드를 보여주십시오. ProjectClassCollection이란 무엇입니까? 나는 그것이 ObservableCollection 타입이 아니라고 생각한다. – user3596113

+1

컬렉션은 상당히 복잡한 ObservableCollection이 아닌 우리의 맞춤 클래스입니다. 컬렉션 항목은 INotifyPropertyChanged를 구현해야하며 컬렉션에는 각 항목의 PropertyChanged 이벤트에 대한 수신기가 있습니다. – Spac3

+0

드롭 다운 목록 및 선택한 항목 값이 업데이트 될 때 표시되는 콤보의 텍스트가 업데이트되지 않은 것처럼 보입니다. – Spac3

답변

0

바인딩 ObservableCollection (및 derrived 클래스)은 항목을 추가하거나 삭제 한 경우에만 작동하며, 변경 이벤트를 호출하는 동작이 원인입니다. 만약 당신이 BindingList를 사용하여 컬렉션 내부의 데이터를 조작해야합니다. 어쩌면 어떤 종류의 포장지가 해결책이 될 수 있습니다.

+0

감사하지만 둘러보기 ObservableCollection은 사용자 정의 IBindingEntitiesList를 구현합니다. – Spac3

+0

... 컬렉션 항목이 변경 될 때 알림 메커니즘을 제공합니다. public interface IBindingEntitiesList' '{' 'Action BindingListChanged {get; 세트; }' '액션 BindingListItemChanged {get; 세트; }' '}' – Spac3

0

한 가지 작업을 수행하십시오. 단추에서 을 클릭합니다. 1. 콤보 상자에서 선택한 인덱스를 가져옵니다. 2. 컬렉션의 모든 문자열을 바꿉니다. 3. 1 단계에서 이전에 저장 한 선택한 인덱스를 사용하여 combobox의 selecteditem 속성을 설정합니다.

+0

감사하지만이 해결 방법이 마음에 들지 않습니다. 나는 훨씬 더 깨끗한 해결책을 선호한다. 바인딩이 제대로 작동하지 않는 이유가 궁금합니다. – Spac3

관련 문제