状況:
XAML で DataGrid を作成しました。ItemsSource は、プロパティを含む特定のクラスの ObservableCollection にバインドされています。次に、C# で DataGridTextColumn と DataGridComboBoxColumn を作成し、これらを ObservableCollection 内のオブジェクトのプロパティにバインドします。DataGridComboBoxColumn を単純なコレクションにバインドできますが、それを文字列のコレクションのコレクションにバインドして、行ごとに DataGrid 内の ComboBox が異なる文字列のコレクションを持つようにします。私はそうするのに失敗しました...
質問:
このタイプの列の行ごとに異なる文字列のコレクションを持つことができるように、DataGridCombBoxColumn をバインドするにはどうすればよいですか?
コードサンプル:
XAML:
<Window>
<!-- ... -->
WPFToolkit:DataGrid
x:Name="DG_Operations"
Margin="10,5,10,5"
Height="100"
HorizontalAlignment="Stretch"
FontWeight="Normal"
ItemsSource="{Binding Path=OperationsStats}"
AlternatingRowBackground="{DynamicResource SpecialColor}"
HorizontalScrollBarVisibility="Auto"
VerticalScrollBarVisibility="Visible"
SelectionMode="Extended"
CanUserAddRows="False"
CanUserDeleteRows="False"
CanUserResizeRows="True"
CanUserSortColumns="True"
AutoGenerateColumns="False"
IsReadOnly="False"
IsEnabled="True"
BorderThickness="1,1,1,1"
VerticalAlignment="Stretch"/>
<!-- ... -->
</Window>
C#:
public class DataModelStatsOperations
{
public ObservableCollection<IStatsOperation> OperationsStats { get; set; }
}
public interface IStatsOperation
{
string Operation { get; set; }
Collection<string> Data{ get; set; }
}
public class StatsOperation : IStatsOperation
{
public StatsOperation(string operation, Collection<string> data)
{
Operation = operation;
Data = data;
}
public string Operation { get; set; }
public Collection<string> Data{ get; set; }
}
private ObservableCollection<IStatsOperation> dataOperations_ =
new ObservableCollection<IStatsOperation>();
//...
Binding items = new Binding();
PropertyPath path = new PropertyPath("Operation");
items.Path = path;
DG_Operations.Columns.Add(new DataGridTextColumn()
{
Header = "Operations",
Width = 133,
Binding = items
});
DG_Operations.Columns.Add(new DataGridComboBoxColumn()
{
Header = "Data",
Width = 190,
ItemsSource = /*???*/,
SelectedValueBinding = new Binding("Data"),
TextBinding = new Binding("Data")
});
dataOperations_.Add(new StatsOperation(CB_Operation.SelectedItem.ToString(),
dataCollection));
DG_Operations.DataContext = new DataModelStatsOperations
{
OperationsStats = dataOperations_
};
//...
どんな助けでも大歓迎です!
ノート:
さて、最初の2つの回答を読んだ後、私は何かに気づきました. 私のバインディングは本当に正しくありません! 今、私がやりたいことは、AndyG が提案したものに似たものです。
DG_Operations.Columns.Add(new DataGridComboBoxColumn()
{
Header = "Data",
Width = 190,
ItemsSource = new Binding("Data"), //notice this here does not work (have a look at the following error)
SelectedValueBinding = new Binding("Operation"),
TextBinding = new Binding("Operation")
});
エラー:「型 'System.Windows.Data.Binding' を 'System.Collections.IEnumerable' に暗黙的に変換できません。」
ItemsSource をデータにバインドするにはどうすればよいですか?