簡體   English   中英

添加/刪除項目后更新Listview

[英]Updating Listview after adding/removing item

將項目添加到Windows Store應用程序中的集合后,如何刷新ListView? 將項目添加到列表可以正常工作,但Listview不會刷新。 我正在嘗試實現INotifyCollectionChanged ,但是究竟應該怎么做才能使其起作用?

編輯:XAML文件

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ListView HorizontalAlignment="Left" Height="437" Margin="10,120,0,0" VerticalAlignment="Top" Width="593" ItemsSource="{Binding Persons, Mode=TwoWay}" Background="#FF5D5D5D">
        <ListView.DataContext>
            <Model:School/>
        </ListView.DataContext>
    </ListView>
    <Button Content="Button" HorizontalAlignment="Left" Margin="7,64,0,0" VerticalAlignment="Top" Command="{Binding AddCommand, Mode=OneWay}">
        <Button.DataContext>
            <Model:School/>
        </Button.DataContext>            
    </Button>
</Grid>

C#代碼:

class School
{
    private ObservableCollection<string> _persons = new ObservableCollection<string>()
    {
        "Name1", "Name2", "Name3"
    };

    public ObservableCollection<string> Persons
    {
        get { return _persons; }
    }

    private ICommand _addCommand;
    public ICommand AddCommand
    {
        get
        {
            return this._addCommand ??
                   (this._addCommand = new RelayCommand(Add));
        }
    }

    private void Add()
    {
        this._persons.Add("Name");
    }
}

使用ObservableCollection時不需要添加INotifyCollectionChanged-它已經實現了所需的接口。

您的代碼應該可以運行,盡管可能還有其他問題:

  • 檢查是否正確設置了ListView的DataContext (在本例中為其父級)-應該對其進行設置,以便“ ListView可以找到” Persons屬性,

  • 還檢查ItemTemplate是否設置正確-例如:

     <ListView Name="myList" ItemsSource="{Binding Persons}"> <ListView.ItemTemplate> <DataTemplate> <StackPanel Orientation="Horizontal"> <TextBlock Text="{Binding Name}"/> <TextBlock Text="{Binding Surname}"/> </StackPanel> </DataTemplate> </ListView.ItemTemplate> </ListView> 
  • 在您的情況下,您的ListView的ItemsSource不需要使用TwoWay綁定-您不需要定義Persons屬性的設置器。

編輯:

編輯之后,我可以看到問題出在哪里-您正在為ListViewButton設置單獨的DataContext-按鈕將添加到其自己的集合中-與ListView綁定到集合不同。 進行簡短測試-將兩者的DataContext設置為相同的staticresource:

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid.Resources>
        <Model:School x:Key="mySchool"/>
    </Grid.Resources>
    <ListView HorizontalAlignment="Left" VerticalAlignment="Stretch" Margin="10,120,0,0" ItemsSource="{Binding Persons}" Background="#FF5D5D5D"
              DataContext="{StaticResource mySchool}"/>
    <Button Content="Button" HorizontalAlignment="Left" Margin="7,64,0,0" VerticalAlignment="Top" Command="{Binding AddCommand, Mode=OneWay}"
            DataContext="{StaticResource mySchool}">
    </Button>
</Grid>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM