はじめに
さまざまな DataSources のプールがあります。私はマスクを持っています。マスクにはインデックスラインがあります。各インデックスラインには、関連付けられたプールからの単一の DataSource があります。
クラス
public class DataSource
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}
public class Mask
{
public string Name { get; set; }
public ObservableCollection<Indexline> Indexlines { get; set; }
public override string ToString()
{
return Name;
}
}
public class Indexline
{
public DataSource SelectedDatasource { get; set; }
}
依存関係のプロパティ
私の MainWindow には、いくつかの依存関係プロパティがあります (特別なことは何もありません)。
- 利用可能なデータソース (
ObservableCollection<DataSource>
) - 利用可能なマスク (
ObservableCollection<Mask>
) - 選択したマスク (
Mask
)
サンプルデータ
これは、のLoaded
イベントに設定されている私のサンプル データWindow
です。
this.AvalibleMasks = new ObservableCollection<Mask>()
{
new Mask()
{
Name = "Search Mask",
Indexlines = new ObservableCollection<Indexline>()
{
new Indexline(),
new Indexline(),
new Indexline(),
new Indexline(),
}
},
new Mask()
{
Name = "Document Mask",
Indexlines = new ObservableCollection<Indexline>()
{
new Indexline(),
new Indexline(),
}
}
};
this.AvalibleDataSources = new ObservableCollection<DataSource>()
{
new DataSource(){Name = "ERP Database"},
new DataSource(){Name = "CRM Database"},
};
XAML
そして、これが私のウィンドウのxamlコードです:
<Window x:Class="DataSourcesQuestion.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Name="MainWindow_instance"
Title="MainWindow" Height="372" Width="735" Loaded="Window_Loaded">
<Grid>
<ListBox ItemsSource="{Binding AvalibleMasks}" SelectedItem="{Binding SelectedMask}" Margin="10,10,10,236" />
<DataGrid Margin="10,111,10,43" ItemsSource="{Binding SelectedMask.Indexlines}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTemplateColumn Width="500" Header="Selected DataSource">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox ItemsSource="{Binding AvalibleDataSources,Source={x:Reference MainWindow_instance}}"
SelectedItem="{Binding SelectedDatasource}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</Window>
でマスクを選択するとListBox
、すべてのインデックスラインが に表示されますDataGrid
。これまでのところすべて順調です。DataSource
から選択したことがわかっている場合、それはオブジェクトComboBox
に保存されません。Indexline
(マスクを切り替えてから元に戻すと、選択が失われます。また、デバッガーを使用すると、 の がすべて null であることがわかりSelectedDatasource
ますMask
)
質問
この動作の原因は何ですか? 期待されるものを得るには何を変更する必要がありますか?
誰かがより良いタイトルを提案できますか? 現在のものはあまり役に立たないように感じます:(