У меня небольшая проблема с диссертацией. Я использую технологию WPF и создаю Window с двумя строками и тремя столбцами (я назвал grid при Row = 0 и Column = 0 как LeftTop et c.)
К этой сетке я хочу динамически добавить специфику c UserControl (мое приложение должно быть максимально настраиваемым).
Поэтому после инициализации компонентов моего окна у меня есть методы:
private void FillUserDashBoardComboboxes(int selectedBoardId)
{
List<UserDashBoards> specificBoard = userDashboard.GetUserDashBoard(selectedBoardId, User.UsrId);
foreach (var item in specificBoard)
SetDashboardItems(item);
TabControlMainUserDashoard.SelectedIndex = 1;
}
private void SetDashboardItems(UserDashBoards specificItem)
{
UserControl control = GetSpecificUserControl(specificItem);
switch(specificItem.PositionID)
{
case 1:
LeftTop.Children.Clear();
LeftTop.Children.Add(control);
break;
}
}
private UserControl GetSpecificUserControl(UserDashBoards dashBoard)
{
switch (dashBoard.UserGadgetId)
{
case 1: return new UserControls.ListViewControl(dashBoard.ProId, dashBoard.MetId);
default: throw new InvalidDataException("Nepodporovaný typ metriky");
}
}
Самый важный метод (для этой ситуации) GetSpecificUserControl (третий). В этом я создаю новый экземпляр моего UserControl ListViewControl ..
XAML ListViewControl выглядит как
<Grid Grid.Row="1">
<ListView x:Name="ListViewForSpecificMetric" Visibility="Visible"/>
</Grid>
Я создаю GridView динамически в коде позади.
private void Initialize()
{
DataTable dataTable = watchedMetricsProvider.GetDataFromSpecificMetric(proId,metId, firstDay, lastDay);
GridView gv = new GridView();
for (int i = 0; i < dataTable.Columns.Count; i++)
gv.Columns.Add(new GridViewColumn() { DisplayMemberBinding = new Binding(dataTable.Columns[i].ColumnName), Header = dataTable.Columns[i].ColumnName, Width = 150 });
ListViewForSpecificMetric.ItemsSource = dataTable.AsEnumerable();
ListViewForSpecificMetric.View = gv;
}
Все хорошо, но я не вижу свои данные в ListView Невидимые данные
Но я уверен, что ListView содержит мои данные, потому что когда я пытался добавить событие в ListViewItems
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
</Style>
</ListView.ItemContainerStyle>
и щелкнуть по случайной строке, я вижу данные в своем элементе. Содержание
private void ListViewItem_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
ListViewItem item = sender as ListViewItem;
}
Что я пробовал:
- Добавить элементы наборов стилей в XAML:
<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<EventSetter Event="PreviewMouseLeftButtonDown" Handler="ListViewItem_PreviewMouseLeftButtonDown" />
<Setter Property="Visibility" Value="Visible"/>
<Setter Property="Foreground" Value="Black"/>
</Style>
</ListView.ItemContainerStyle>
Использование некоторых методов "хорошего звучания" в Code за
ListViewForSpecificMetric.Items.Filter = null;
ListViewForSpecificMetric.Items.Refresh();
.. но я все еще не вижу свои данные в ListView.
Кто-нибудь может мне помочь, пожалуйста?