내 WPF 응용 프로그램에서 런타임에 사용자가 생성 한 여러 항목을 갖고 싶습니다. 이것들은 다른 클래스에서 왔기 때문에 원래의 관념은 그들을 다른 Observable Collections에 추가 한 다음 다른 ItemsControls를 ItemsSources로 사용하는 것이 었습니다. 그러나 WPF 내게 오류 System.InvalidOperationException : ItemsSource를 사용하기 전에 항목 컬렉션이 비어 있어야합니다. 저는 WPF 전문가가 아니지만 THIS SO 질문에 대한 대답은 ItemsControl이 1 개 밖에 없다는 것을 나타냅니다.WPF : ItemsSources가 다른 여러 ItemsControl을 가질 수 있습니까?
THIS 질문에 따라 CompositeCollection 클래스를 사용해야하지만 인용 된 질문과 달리 완전히 다른 작업을 위해 Observable Collections가 완전히 다릅니다. 사용자 정의 인터페이스 유형 1 및 사용자 정의 클래스 유형
public MainWindow()
{
InitializeComponent();
DefaultWindowDefinition.ItemsSource = ProcessElements = new ObservableCollection<IProcessSimulator>();
PathControl.ItemsSource = PathElements = new ObservableCollection<VisualPath>();
}
을 1 그리고 여기 내가 사용하려고 한 XAML의 관련 부분입니다 : 여기
두 컬렉션 내 XAML.CS의 관련 부분입니다 :<Grid x:Name="MainGrid"
Background="{StaticResource Alternating}"
MouseLeftButtonUp="grid_MouseLeftButtonUp"
ShowGridLines="True">
<ItemsControl Name="DefaultWindowDefinition"
ItemsSource="{Binding ProcessElements}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--HERE IS A LONG LIST OF ELEMENTS-->
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<!--TEMPLATE FOR THE 1ST ITEMSCONTROL-->
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
<ItemsControl.ItemContainerStyle>
<Style>
<!--STYLE PROPERTIES FOR THE 1ST ITEMSCONTROL-->
</Style>
</ItemsControl.ItemContainerStyle>
</ItemsControl>
<ItemsControl Name="PathControl"
ItemsSource="{Binding PathElements}">
<DataTemplate>
<!--HERE IS A LIST OF OTHER TYPE OFELEMENTS-->
</DataTemplate>
</ItemsControl>
</Grid>
어떻게이 문제를 해결해야합니까? 아니면 C#/WPF 요소를 사용해야합니까? 참조 및 간단한 설명의 몇 가지 단어가 충분 이상, 내가 할 수있는 구글, 나머지는 나 자신, 난 그냥 모르겠어, 정말 무엇을 찾으려고.
내가 잘못 본 것 중에 하나는 XAML에서'ItemsSource'를 바인딩 할 필요가 없으며 생성자에서도 설정할 수 있다는 것입니다. 멤버 속성 ('ProcessElements' 및'PathElements') 만 설정하면 충분합니다. 그 예외가 발생할 수 있습니다. 그렇지 않은 경우 어떤 라인에서 예외가 발생합니까? – Andy
그게 문제의 근원은 아니지만 코드 숨김에서 ItemsSource _only_를 설정하는 것 같습니다. 이것을 지적 해 주셔서 감사합니다! – rTECH