0

私は wpf でデータグリッドを作成し、.xaml.cs でいくつかのコードを作成しました。

List<TaskHeader> taskHeaders;
//initialization of taskHeaders
taskDataGrid.ItemsSource = taskHeaders;

したがって、更新ボタンをクリックした後、taskHeaders の変更を taskDataGrid ビューに更新する必要がありますが、ObservableCollection を実装しないと方法が見つかりません。taskDataGrid.Items.Refresh();動かない。

taskDataGrid.ItemsSource = null;
taskDataGrid.ItemsSource = taskHeaders;
taskDataGrid.Items.Refresh();

あまりにも任意のアイデアを働いていませんか?助けてください

4

3 に答える 3

0

試す

CollectionViewSource.GetDefaultView(taskHeaders).Refresh();
于 2012-05-22T14:44:02.720 に答える
0

私はこれをテストしましたが、これは機能します:

私のXAML:

<Window x:Class="WpfApplication.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<DockPanel>
    <Button DockPanel.Dock="Bottom" Content="Change list and refresh grid" Click="OnRefreshButtonClicked"/>
    <DataGrid x:Name="taskDataGrid"/>
</DockPanel>

私のコードビハインド:

using System.Collections.Generic;
using System.Windows;
using System.Windows.Data;

namespace WpfApplication
{
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            var taskHeaders = new List<TaskHeader>();
            for (int i = 0; i < 10; ++i)
                taskHeaders.Add(new TaskHeader() { Property = "Property " + i });

            this.taskDataGrid.ItemsSource = taskHeaders;
        }

        private void OnRefreshButtonClicked(object sender, RoutedEventArgs e)
        {
            var taskHeaders = (List<TaskHeader>)this.taskDataGrid.ItemsSource;

            // Make changes on taskHeaders by removing first item.
            taskHeaders.RemoveAt(0);

            CollectionViewSource.GetDefaultView(taskHeaders).Refresh();
        }
    }
}

そして私のダミー TaskHeader クラス:

namespace WpfApplication
{
    public class TaskHeader
    {
        public string Property { get; set; }
    }
}
于 2012-05-22T15:17:52.017 に答える