제목에서 알 수 있듯이, 콤보 컬렉션을 사용하여 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를 사용하라는 제안이 있지만 다른 스레드에서 올바른 구문을 찾을 수없는 것 같습니다.
아직도이 글을 읽는다면 어떤 도움이 정말로 주어집니다.