Как добавить информацию к определённой заявке?
Делаю что-то вроде Help Desk и до поры до времени всё получалось, пусть и криво-косо. Но вот решила я добавить немного функциональности своему приложению, а реализовать что-то не получается. В наличие имеется xml файл со следующей структурой:
<?xml version="1.0" encoding="utf-8"?>
<Appeals>
<appeal0>
<fullName />
<company />
<суть заявки>
.
.
<ID>0</ID>
</appeal0>
<appeal1>
<fullName />
<company />
<суть заявки>
.
.
<ID>1</ID>
</appeal1>
</Appeals>
Model :
class FillAppeal_VM : INotifyPropertyChanged
{
private string _fullName;
private string _email;
.
.
public string Email
{
get { return _email; }
set
{
_email = value;
OnPropertyChanged("Email");
}
}
.
.
}
ViewModel:
class ViewAppeals_VM : INotifyPropertyChanged
{
private FillAppeal_VM _selectedAppeal;
FillAppeal_model _fillAppeal_Model;
public FillAppeal_VM SelectedAppeal
{
get { return _selectedAppeal; }
set
{
_selectedAppeal = value;
OnPropertyChanged("SelectedAppeal");
}
}
public ViewAppeals_VM()
{
Appeals = new ObservableCollection<FillAppeal_VM>();
_fillAppeal_Model = new FillAppeal_model();
}
void AddAppeals()
{
appeals = fileReader.GetAppeals();
foreach (var appeal in appeals)
{
Appeals.Add(new FillAppeal_VM { FullName = appeal[0], Company = appeal[1],.. });
}
}
}
Класс, в котором метод считывания из xml:
public List<List<string>> GetAppeals()
{
XDocument xdoc = XDocument.Load(pathToAppeals);
foreach (XElement currentAppeal in xdoc.Element("Appeals").Elements())
{
appeal = new List<string>();
XElement fullNameElement = currentAppeal.Element("fullName");
XElement companyElement = currentAppeal.Element("company");
.
.
appeal.Add(fullNameElement.Value);
.
.
appeals.Add(appeal);
}
}
return appeals;
}
И соответственно xaml, в правой части которого ListBox, который при заполнении отображает короткое инфо о заявке:
<Grid>
<ListBox x:Name="BrieflyAppeal" Visibility="{Binding IsVisibleData}" ItemsSource="{Binding Appeals}"
SelectedItem="{Binding SelectedAppeal}">
<ListBox.ItemTemplate>
<DataTemplate >
<StackPanel Margin="5,5,0,5" >
<TextBlock Grid.Column="1" FontSize="16" FontWeight="Bold" Foreground="SaddleBrown" Text="{Binding Path=Company}" />
<TextBlock Grid.Column="1" FontSize="14" FontWeight="Bold" Grid.Row="1" Text="{Binding Path=FullName}" />
.
.
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
В правой же части xaml, отображается более подробная информация о заявке( время, дата, статус .. ну и суть самой заявки :
<StackPanel x:Name="DetailStackPanel" Loaded="DetailStackPanel_Loaded" DataContext="{Binding SelectedAppeal}">
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Company,
UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Status,
UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Appeal,
UpdateSourceTrigger=PropertyChanged}" />
.
.
</StackPanel>
Всё работает как надо. Так как и ListBox и StackPanel привязаны к одной SelectedAppeal то при выборе item в ListBox отображаются такие же данные и в StackPanel.
Как вы могли заметить заявки идут одним скопом. Но что если я хочу добавить информацию к определённой заявке. И вот здесь я зависла. Тут уже вопросы начинаются даже с самого xml файла. Толи создавать множество заявок под одним ID, то ли добавлять данные к заявке с одним ID, но тут опять же непонятно как это будет выглядеть и как потом это разгребать. Но это я ещё могу как-то придумать, распихать там по спискам или что-то типа того.
Больше волнует, как динамически отобразить все данные по одной заявке в StackPanel?? Т.е. при выборе заявки в ListBox, в StackPanel нужно отобразить что-то типа:
<StackPanel x:Name="DetailStackPanel" Loaded="DetailStackPanel_Loaded" DataContext="{Binding SelectedAppeal}">
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding ID,
UpdateSourceTrigger=PropertyChanged}" />
<Grid>
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Status,
UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Appeal,
UpdateSourceTrigger=PropertyChanged}" />
.
. в общем время, дата, статус и сама заявка
</Grid>
<Grid>
.. потом соответственно, была допустим добавлена информация к заявке с этим же ID и тут следующая дата, время...
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Status,
UpdateSourceTrigger=PropertyChanged}" />
<TextBlock Style="{StaticResource DetailsViewAppeal}" Text="{Binding Appeal,
UpdateSourceTrigger=PropertyChanged}" />
.
. и т.д.
</Grid>
</StackPanel>