Ситуация:
Я создал DataGrid в XAML, а ItemSource привязан к ObservableCollection определенного класса, который содержит свойства. Затем в С# я создаю DataGridTextColumn и DataGridComboBoxColumn и привязывал их к свойствам объектов внутри ObservableCollection. Я могу привязать DataGridComboBoxColumn к простой коллекции, но то, что я хочу сделать, это привязать его к коллекции наборов строк, чтобы для каждой строки ComboBox внутри DataGrid имел другую коллекцию строк. Я не сделал этого...
Вопрос:
Как я могу привязать 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>
С#
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_
};
//...
Любая помощь будет принята с благодарностью!
Примечания:
Хорошо, поэтому, прочитав два первых ответа, я кое-что заметил. Моя привязка действительно не права! Теперь, что я хочу сделать, это нечто похожее на то, что предложил 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 с данными?