Я занимаюсь разработкой приложения с помощью WAF (WPF Application Framework), который основан на MVVM, MEF и т.д.Datagrid колонка связывания
я в настоящее время есть несколько объектов домена с аналогичными структурами, как показано ниже (укороченный для краткость):
public class MyBaseClass : INotifyPropertyChanged
{
private DateTime? _firstDateTime;
protected DateTime? firstDateTime
{
get { return _firstDateTime; }
set
{
_firstDateTime = value;
OnPropertyChanged(new PropertyChangedEventArgs("FirstDateTime"));
}
private DateTime? _secondDateTime;
protected DateTime? secondDateTime
{
get { return _secondDateTime; }
set
{
_secondDateTime = value;
OnPropertyChanged(new PropertyChangedEventArgs("SecondDateTime"));
}
public DateTime? FirstDateTime
{
get { return firstDateTime; }
set { firstDateTime = value; }
}
public DateTime? SecondDateTime
{
get { return secondDateTime; }
set { secondDateTime = value; }
}
}
public class MyBaseCollectionClass : INotifyPropertyChanged
{
private ObservableCollection<MyBaseClass> _baseClassObjectCollection;
protected ObservableCollection<MyBaseClass> baseClassObjectCollection
{
get { return _baseClassObjectCollection; }
set
{
_baseClassObjectCollection = value;
OnPropertyChanged(new PropertyChangedEventArgs("BaseClassObjectCollection"));
}
}
public ObservableCollection<MyBaseClass> BaseClassObjectCollection
{
get { return baseClassObjectCollection; }
set { baseClassObjectCollection = value; }
}
}
Тогда в моем ApplicationController у меня есть метод, который загружает в ObservableCollection в представлении-модели, как, например:
for (int i = 0; i <= 9; i++)
{
detailsViewModel.MyBaseClassObjects.Add(new MyBaseClass()
{
FirstDateTime = Convert.ToDateTime("05/2" + i + "/2012 09:00:00 AM"),
SecondDateTime = Convert.ToDateTime("05/2" + i + "/2012 04:30:00 PM")
});
}
И еще один метод, который группирует большая коллекция в небольшие сгруппированных коллекции по дате:
detailsViewModel.MyBaseClassObjects
.GroupBy(baseObject => ((DateTime)baseObject.FirstDateTime).Date)
.Select(group => group.ToList())
.ToList()
.ForEach(list => detailsViewModel.BaseObjectCollections
.Add(
new MyBaseCollectionClass()
{ BaseClassObjectCollection = new ObservableCollection<MyBaseClass>(list)}
)
);
Затем в XAML моего взгляда, я иметь ItemsControl связана, как, например:
<ItemsControl ItemsSource="{Binding BaseObjectCollections}" ItemTemplate="{StaticResource ItemsTemplate}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
An в ResourceDictionary для представления, у меня есть DataTemplate, объявленный как таковой (некоторые элементы опущены для ясности):
<DataTemplate x:Key="ItemsTemplate">
<Grid DataContext="{Binding MyBaseClassObjects}">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>
<DataGrid Grid.Row="1"
Background="Transparent"
Style="{DynamicResource DataGridStyle}"
AlternatingRowBackground="Gainsboro"
AlternationCount="2"
AutoGenerateColumns="False"
HeadersVisibility="None"
ItemsSource="{Binding RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Grid}}, Path=DataContext}">
<DataGrid.Columns>
<DataGridTextColumn Width=".25*">
<DataGridTextColumn.Binding>
<MultiBinding Converter="{x:Static myConvNS:MultiValueTESTCONVERTER.Retrieve}">
<Binding Path="FirstDateTime"/>
<Binding Path="SecondDateTime"/>
</MultiBinding>
</DataGridTextColumn.Binding>
</DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
</Grid>
</DataTemplate>
ПРИМЕЧАНИЕ. В приведенном выше DataTemplate у меня есть многосвязывание, поэтому я могу видеть, какие значения передаются в преобразователь. Я понимаю, что не смогу добиться желаемого эффекта (описанного ниже), но я хотел бы пройти через привязку и посмотреть, что получал конвертер - ничего больше на данный момент. В конечном итоге то, что я пытаюсь выполнить (если возможно), заключается в том, что я хотел бы привязывать свой Datagrid таким образом, чтобы значения FirstDateTime и SecondDateTime отображались в одном столбце, чередуясь. Смотрите изображение ниже для визуальной помощи:
Мои первые мысли были иметь некоторый другой общий объект, который выставляет одно свойство DateTime и ломаются мои базовые объекты (которые имеют два свойства DateTime) в случаях этот общий объект, а затем привязывается к коллекции этих общих объектов. Однако мне не нравится эта идея. Когда изменения происходят в свойствах DateTime моего базового объекта, мне нужно знать об этом, и я боюсь, что, разделив этот объект на два общих объекта, я потеряю возможность правильно отправлять и получать уведомления.
У кого-нибудь есть предложения или мысли?
Извините, что не отвечал до сих пор, но я дам этот снимок и посмотрю, какие результаты я получу. Благодаря! – dgsmith15