2

제목에서 알 수 있듯이, 콤보 컬렉션을 사용하여 MVVM 패턴을 사용하여 관찰 가능한 컬렉션에 바인딩하는 콤보 박스가 있습니다.composite collection이 observablecollection의 변경으로 업데이트되지 않는 Combobox

기존 데이터로 모델을로드하면 콤보 상자에 값이 표시되어 바인딩이 작동하는지 알 수 있습니다. 나는 observable 컬렉션에 항목을 추가 할 수 있으며, 데이터 그리드에 표시되므로 observable 컬렉션의 이벤트가 변경되었다고 알립니다. 나는 종합 컬렉션이 소스로 "정적 자원"을 사용하고 있기 때문에 작동하지 않습니다 의심하지만 동적 리소스로 변경하면 그때는 오류 얻을 : 나는 해결책을 찾을 수 일 동안 검색 한

A 'DynamicResourceExtension' cannot be set on the 'Source' property of type 'Binding'. A 'DynamicResourceExtension' can only be set on a DependencyProperty of a DependencyObject.

을 다른 사람들은 유사한 문제에 직면 해 있지만 솔루션은 아직 내 문제를 해결하지 못했습니다.

<ComboBox MinWidth="100" SelectedValue="{Binding combovalue, ValidatesOnDataErrors=True, UpdateSourceTrigger=PropertyChanged}" SelectedValuePath="Name"> 
    <ComboBox.Resources> 
     <vm:ViewModel x:Key="CollectionKey"/> 
    </ComboBox.Resources> 

    <ComboBox.ItemsSource> 
     <CompositeCollection> 
      <CollectionContainer Collection="{Binding ModelCollection, Source={StaticResource CollectionKey}, UpdateSourceTrigger=PropertyChanged}"/> 
     </CompositeCollection> 
    </ComboBox.ItemsSource> 

    <ComboBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding Path=Name, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/> 
     </DataTemplate> 
    </ComboBox.ItemTemplate> 
</ComboBox> 

여러분 모두 감사합니다

public class Model : ObservableObject 
{ 
    #region Properties 

    private string name; 
    public string Name 
    { 
     get { return this.name; } 
     set { this.name = value; } 
    } 

    private string balance; 
    public string Balance 
    { 
     get { return this.balance; } 
     set { this.balance = value; } 
    } 
    #endregion 

내 뷰 모델 :

public class ViewModel : ObservableObject 
{ 
    private ObservableCollection<Model> modelcollection; 
    public ObservableCollection<Model> ModelCollection 
    { 
     get { return modelcollection; } 
     set 
     { 
      modelcollection= value; 
      RaisePropertyChangedEvent("ModelCollection"); 
     } 
    } 

    private string _name; 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      RaisePropertyChangedEvent("Name"); 
     } 
    } 
    private string _balance; 
    public string Balance 
    { 
     get { return _balance; } 
     set 
     { 
      _balance = value; 
      RaisePropertyChangedEvent("Balance"); 
     } 
    } 

그리고 콤보 내보기의 마지막 XAML 여기

내 모델에 대한 코드입니다 순전히.

편집 :

그래서 저는 한 방향으로 움직였습니다. 옳고 그름은 아직 결정되지 않았다.

나는 문제가 더 많은 컨텍스트가 필요하므로 여기에 콤보 박스 외부에 있다고 생각합니다.

comobobox는 탭 컨트롤의 두 번째 탭에 있습니다. 각 탭 항목에는 자체 뷰 모델을 가리키는 자체 데이터 컨텍스트가 있습니다. 첫 번째 탭에 데이터가 입력되고 그 데이터가 두 번째 탭의 콤보 박스에 표시되도록합니다.

첫 번째 탭에 콤보 상자를 놓으면 해당 콤보 상자가 첫 번째 탭에 입력 된대로 관찰 가능 모음의 변경 사항으로 업데이트됩니다. 그래서이 문제는 두 번째 탭의 콤보 박스가 두 개의 다른 뷰 모델에 동시에 바인딩하려고 시도한다는 것입니다. 하나는 항목 소스 용이고 다른 하나는 선택한 값 용입니다.

데이터 컨텍스트에 x : Reference를 사용하라는 제안이 있지만 다른 스레드에서 올바른 구문을 찾을 수없는 것 같습니다.

아직도이 글을 읽는다면 어떤 도움이 정말로 주어집니다.

답변

0

결국에는 다른보기 모델에서 채울 콤보 상자가 없었습니다. 이것이 가능한지 아직 확실하지 않습니다.

마지막으로 나를 위해 작동 한 솔루션은 바인딩에 필요한 모든 것을 단일 뷰 모델에 결합하는 것이 었습니다. 뷰 모델을 약간 무겁게 만들었지 만 XAML에서 많은 것을 줄여서이기는 것 같아요.

관련 문제