В UWP, когда я изменяю данные в коде C #, он не обновляется на вид спереди - PullRequest
0 голосов
/ 01 ноября 2018

Я реализую список в UWP. Я привязываю данные к списку из коллекции объектов. когда я изменяю данные в коллекции, они не обновляются. Списки остаются как есть? Пожалуйста, предложите мне, что делать, чтобы обновить данные? Заранее спасибо.

1 Ответ

0 голосов
/ 02 ноября 2018

когда я изменяю данные в коллекции, они не обновляются. Список остается как есть?

Когда значение вашей собственности изменяется, вам необходимо уведомить об этом обязывающих клиентов. Итак, как уведомить?

Вам необходимо реализовать интерфейс INotifyPropertyChanged. для вашего пользовательского класса и вызывает событие PropertyChanged при изменении свойства.

Я сделал простой пример кода для справки:

<Grid>
    <ListView ItemsSource="{Binding tests}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Name}"></TextBlock>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

    <Button Content="update" Click="Button_Click"></Button>
</Grid>
public sealed partial class MainPage : Page
{
    public ObservableCollection<Test> tests { get; set; }
    public MainPage()
    {
        this.InitializeComponent();
        tests = new ObservableCollection<Test>();
        for (int i=0;i<10;i++)
        {
            tests.Add(new Test() { Name="Name "+i});
        }
        this.DataContext = this;
    }

    private void Button_Click(object sender, RoutedEventArgs e)
    {
        foreach (var t in tests)
        {
            t.Name = t.Name +" " +DateTime.Now;
        }
    }
}

public class Test:INotifyPropertyChanged
{
    private string _Name;
    public string Name
    {
        get { return _Name; }
        set
        {
            if (_Name != value)
            {
                _Name = value;
                RaisePropertyChanged("Name");
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    private void RaisePropertyChanged(string PropertyName)
    {
        if (PropertyChanged!= null)
        {
            PropertyChanged(this,new PropertyChangedEventArgs(PropertyName));
        }
    }
}
...