【问题标题】:UWP C# Data bindingUWP C# 数据绑定
【发布时间】:2020-07-04 01:17:22
【问题描述】:

我正在编写联系人应用程序,其中我在 ListView 中有姓名和姓氏:

<ListView x:Name="peopleListView" x:FieldModifier="public">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Height="64">
<Ellipse Height="48" Width="48" VerticalAlignment="Center">
<Ellipse.Fill>
<ImageBrush ImageSource="Assets\StoreLogo.png"/>
</Ellipse.Fill>
</Ellipse>
<StackPanel Orientation="Vertical" VerticalAlignment="Center" Margin="12,0,0,0">
<TextBlock Text="{Binding Path=Name}"  Style="{ThemeResource BaseTextBlockStyle}" Foreground="{ThemeResource SystemControlPageTextBaseHighBrush}"/>
<TextBlock Text="{Binding Path=Surname}" Style="{ThemeResource BodyTextBlockStyle}" Foreground="{ThemeResource SystemControlPageTextBaseMediumBrush}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>

以后还会有更多详细信息。但我坚持这个问题。 我有我的课:

public class People : INotifyPropertyChanged
{
private string _name;
private string _surname;
private string _city;

public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged([CallerMemberName] string
propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public string Name
{
get { return _name; }
set
{
_name = value;
OnPropertyChanged("Name");
}
}
public string Surname
{
get { return _surname; }
set
{
_surname = value;
OnPropertyChanged("Surname");
}
}
public string City
{
get { return _city; }
set
{
_city = value;
OnPropertyChanged("City");
}
}    
}

当我有方法时: public void addNew(string name, string surname, string city)

{
listOfPeople.Add(new People() { Name = name, Surname = surname, City = city });
peopleListView.ItemsSource = listOfPeople;
}

我正在通过单击按钮从其他页面添加人员:

private void bt1_Click(object sender, RoutedEventArgs e)

{
MainPage.Current.addNew(name.Text.ToString(), name.Text.ToString(), city.Text.ToString());
MainPage.Current.frame.Navigate(typeof(Details));
}

它只添加一个并停在那里。无论我尝试添加多少次,除了我第一次添加的那个之外,那里什么都没有。 但是当我像这样添加它们时:

public MainPage()
{
this.InitializeComponent();
Current = this;
frame.Navigate(typeof(Details));
addNew("Jan", "Kowalski", "Krakow");
addNew("Jan", "Kowalski", "Krakow");
addNew("Jan", "Kowalski", "Krakow");
addNew("Jan", "Kowalski", "Krakow");
}

它们都在那里,我不能用那个按钮添加另一个。 而且我不知道我应该怎么做才能让它工作。

【问题讨论】:

  • 人员列表应为 ObservableCollection
  • 你可以在 OnPropertyChanged() 中省略属性名,它可以在没有属性名的情况下工作。
  • @AccessDenied 非常感谢您,先生,它正在工作。
  • 还可以使用以下方法在调用 notify 之前检查属性是否更改。 stackoverflow.com/a/1316417/1099716

标签: c# uwp uwp-xaml


【解决方案1】:

listOfPeople的类型改为ObservableCollection&lt;People&gt;并设置ItemsSource一次

private readonly ObservableCollection<People> listOfPeople = new ObservableCollection<People>();

public MainPage()
{
    this.InitializeComponent();
    Current = this;
    peopleListView.ItemsSource = listOfPeople;
    frame.Navigate(typeof(Details));
}

public void addNew(string name, string surname, string city)
{
    listOfPeople.Add(new People() { Name = name, Surname = surname, City = city });
}

【讨论】:

    猜你喜欢
    • 2017-01-29
    • 1970-01-01
    • 2018-04-13
    • 2021-09-09
    • 1970-01-01
    • 2023-03-30
    • 2017-04-30
    • 2017-05-19
    • 1970-01-01
    相关资源
    最近更新 更多