私のWPFアプリケーションでは、実行時にユーザーによって生成されたいくつかのアイテムが必要です。これらは異なるクラスからのものなので、オリジナルのアイデアはObservable Collectionsにそれらを追加し、それらをItemsSourceや異なるItemsControlとして使用することでした。しかし、WPFは私にエラーを与えます。System.InvalidOperationException:ItemsSourceを使用する前にItemsコレクションが空である必要があります。私はWPFのエキスパートではありませんが、THIS SOの質問への答えは、私は1 ItemsControlしか持てないことを示しているようです。WPF:異なるItemsSourcesを持つ複数のItemsControlを持つことはできますか?
THIS私はCompositeCollectionクラスを使うべきでしょうが、引用した質問とは違って、全く異なるタスクのためにObservable Collectionsがいくつかあります。ここで
は、2つのコレクションを持つ私のXAML.CSの関連する部分である:カスタムインタフェースタイプの1と1カスタムクラスタイプ
public MainWindow()
{
InitializeComponent();
DefaultWindowDefinition.ItemsSource = ProcessElements = new ObservableCollection<IProcessSimulator>();
PathControl.ItemsSource = PathElements = new ObservableCollection<VisualPath>();
}
のそして、ここでは、私が使用しようとしたXAMLの関連する部分であります:
<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要素を使用すればよいですか?参照と簡単な説明のいくつかの単語は十分以上です、私は自分自身を残りのGoogleをすることができます、私はちょうど実際に何を探すかわからない。
私が間違っていることの1つは、XAMLで 'ItemsSource'をバインドする必要がなく、コンストラクタにも設定することです。メンバプロパティ( 'ProcessElements'と' PathElements')だけを設定すれば十分です。それが例外を引き起こしている可能性があります。そうでない場合は、どの行が例外をスローしますか? – Andy
これは問題の原因ではありませんでしたが、コードビハインドでItemsSource _only_を設定しているようです。これを指摘してくれてありがとう! – rTECH