У меня есть один элемент управления ListView и несколько кнопок в приложении WPF. На основе щелчка кнопки я хочу заполнить различные списки результатов из разных классов в список. Все эти разные классы обернуты внутри одного класса (ReportClass), как показано ниже. Кстати, я пытаюсь добиться этого, путем изменения GridView и ItemSource списка из кода. Этот код почти работает. Потому что результаты списка изменяются при нажатии кнопки, но отображаются только имя класса вместо результатов в списке этого класса.Обновление ListView с несколькими Gridview C# WPF
P.S: Я не являюсь экспертом в области XAML/WPF. Но, если есть более простые решения, приветствуются. Благодаря
Вот мой код:
public class animalTypes1
{
public string type1name { get; set; };
}
public class animalTypes2
{
public string type2name { get; set; };
}
public class ReportClass
{
public List<animalTypes1> animaltype1 = new List<animalTypes1>();
public List<animalTypes2> animaltype2 = new List<animalTypes2>();
}
private ObservableCollection<ReportClass> _DynamicreportClass;
public ObservableCollection<ReportClass> _DynamicReportSetClass
{
get
{
if (_DynamicreportClass == null)
{
_DynamicreportClass = new ObservableCollection<ReportClass>();
}
return _DynamicreportClass;
}
}
public MainWindow()
{
InitializeComponent();
GridView g1 = new GridView();
g1.AllowsColumnReorder = true;
g1.ColumnHeaderToolTip = "mammals";
GridViewColumn g1c = new GridViewColumn();
g1c.DisplayMemberBinding = new Binding("type1name");
g1c.Header = "AnimalReport1Header";
g1c.Width = 120;
g1.Columns.Add(g1c);
GridView g1x = new GridView();
g1x.AllowsColumnReorder = true;
g1x.ColumnHeaderToolTip = "mammals";
GridViewColumn g1cx = new GridViewColumn();
g1cx.DisplayMemberBinding = new Binding("type2name");
g1cx.Header = "AnimalReport2Header";
g1cx.Width = 120;
g1x.Columns.Add(g1cx);
ReportClass allreports = new ReportClass();
allreports.animaltype1.Add(new animalTypes1() { type1name = "Mammals" });
allreports.animaltype2.Add(new animalTypes2() { type2name = "Reptiles" });
this.Dispatcher.Invoke(System.Windows.Threading.DispatcherPriority.Background, new System.Action(delegate()
{
_DynamicReportSetClass.Add(allreports);
}));
private void btn1_click(object sender, RoutedEventArgs e)
{
ReportGrid.ItemsSource = _DynamicreportClass[0].animaltype1;
ReportGrid.View = g1;
}
private void btn_click2(object sender, RoutedEventArgs e)
{
ReportGrid.ItemsSource = _DynamicreportClass[0].animaltype2;
ReportGrid.View = g1x;
}
Вот XAML:
<Grid>
<WrapPanel Margin="0,0,0,125">
<StackPanel Orientation="Horizontal">
<Button Content="Checkbtn" Click="btn1_click"></Button>
</StackPanel>
<Button Content="Checkbtn" Click="btn_click2"/>
</WrapPanel>
<ListView
x:Name="ReportGrid"
Margin="0,199,0,0"
VerticalAlignment="Stretch"
HorizontalAlignment="Stretch"
HorizontalContentAlignment="Stretch"
>
<ListView.View>
<GridView/>
</ListView.View>
</ListView>
</Grid>
1. XAML не может привязываться к полям, только к свойствам. Добавить {get; задавать; } для всех ваших полей, чтобы они стали свойствами. 2. Ничего не делайте в коде. 3. Пожалуйста, включите свой XAML. Я не уверен, что означает «изменение gridview и itemsource». Является ли это взаимоотношениями между деталями? –
добавлено, как вы упомянули, но не успели – 911Rapid
У вас есть/animaltype1' и 'animaltype2' в ReportClass? –