Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mvvm 更改ObservaleCollection的属性没有任何作用_Mvvm_Xamarin_Binding_Observablecollection - Fatal编程技术网

Mvvm 更改ObservaleCollection的属性没有任何作用

Mvvm 更改ObservaleCollection的属性没有任何作用,mvvm,xamarin,binding,observablecollection,Mvvm,Xamarin,Binding,Observablecollection,在我的Xamarin项目中,我有一个ListView,它由一个ObservableCollection填充,该集合保存具有某些属性的“Item”对象。如果我将项目添加到集合中,UI将得到更新,但如果我只更改一个属性,它将不起任何作用。即使在通过添加项进行UI更新之后,也不会产生任何效果,尽管属性已正确更改。如果属性发生更改,如何刷新UI BindableBase是PRISM中的一个类,它实现INotifyPropertyChanged,DelegateCommand实现ICommand,顺便说一

在我的Xamarin项目中,我有一个ListView,它由一个ObservableCollection填充,该集合保存具有某些属性的“Item”对象。如果我将项目添加到集合中,UI将得到更新,但如果我只更改一个属性,它将不起任何作用。即使在通过添加项进行UI更新之后,也不会产生任何效果,尽管属性已正确更改。如果属性发生更改,如何刷新UI

BindableBase是PRISM中的一个类,它实现INotifyPropertyChanged,DelegateCommand实现ICommand,顺便说一句

这是我的XAML:

<ListView ItemsSource="{Binding ListItems}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell x:Name="viewCell">
                    <ContentView Padding="0,0,0,5" 
                                     HeightRequest="50">
                        <ContentView.GestureRecognizers>
                            <TapGestureRecognizer BindingContext="{Binding Source={x:Reference listView}, Path=BindingContext}"
                                                         Command="{Binding ItemTappedCommand}" 
                                                         CommandParameter="{Binding Source={x:Reference viewCell}, Path=BindingContext}" />
                        </ContentView.GestureRecognizers>
                        <Frame OutlineColor="{Binding Color}" Padding="8">
                            <StackLayout Orientation="Horizontal" >
                                <Image x:Name="checkedImage"
                                         HeightRequest="30"
                                         WidthRequest="30"
                                         BackgroundColor="{Binding Color}"
                                         />
                                <Label Text="{Binding Text}" 
                                         TextColor="{Binding Color}" 
                                         Margin="20,0,0,0"
                                         VerticalTextAlignment="Center" 
                                         HorizontalOptions="FillAndExpand"/>
                                <Image Source="{Binding Image}" />
                            </StackLayout>
                        </Frame>
                    </ContentView>
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

这也是因为item类需要实现INotifyPropertyChanged。在您使用Prism的情况下,您只需要使项目类扩展BindableBase(Prism基类,它已经为您实现了INotifyPropertyChanged)

链接:

这应该会让它起作用

我还看到你在这样做:

public ObservableCollection<Item> ListItems
{
    get { return _listItems; }
    set { SetProperty(ref _listItems, value); }
}
公共可观测集合列表项
{
获取{return\u listItems;}
集合{SetProperty(ref _listItems,value);}
}
使用ObservableCollections,您不需要手动引发事件,因为它们已经在内部引发了。它们可以定义为常规属性

public ObservableCollection<Item> ListItems {get; set;}
publicobservableCollection列表项{get;set;}

谢谢!现在,属性更改按预期进行。同时也感谢您提供的关于ObservableCollection的提示。
public ObservableCollection<Item> ListItems
{
    get { return _listItems; }
    set { SetProperty(ref _listItems, value); }
}
public ObservableCollection<Item> ListItems {get; set;}