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