Xamarin Forms ListView 绑定未更新

A.弗里斯维克

我有个问题。我用 ViewModel 创建了一个 ListView。在我的 ListView 中,我有一些带有文本的标签,它们绑定到 ItemSource 中的对象。现在,当我更改 ObservableCollection 中某个项目的 ViewModel 中的值时,屏幕上没有任何变化!

这是我的视图模型:

public class VM_DeviceList : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;


    public ICommand cmdDeleteDevice
    {
        get
        {
            return new Command<int>((x) => DeleteDevice_Handler(x));
        }
    }

    public ICommand cmdTogglePower
    {
        get
        {
            return new Command<int>((x) => TogglePower_Handler(x));
        }
    }


    private ObservableCollection<DisplayedDevice> _knownDeviceList;
    public ObservableCollection<DisplayedDevice> knownDeviceList
    {
        get
        {
            return _knownDeviceList;
        }
        set
        {
            if (_knownDeviceList != value)
            {
                _knownDeviceList = value;

                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("knownDeviceList"));
                }
            }
        }
    }

这是我的 ObservableCollection 类:

public class DisplayedDevice : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string State { get; set; }
    public string StateShown { get; set; }
    public string deviceImage { get; set; }
    public string Color { get; set; }
    public string PowerStateColor { get; set; }
    public string DeviceImageColor { get; set; }

    public string DeviceImage
    {
        get
        {
            return deviceImage;
        }

        set
        {
            deviceImage = value;
            OnPropertyChanged();
        }
    }
}

这是xaml:

<ListView ItemsSource="{Binding knownDeviceList}" SelectionMode="None" RowHeight="90" ItemTapped="device_Clicked" x:Name="MyListView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <ViewCell>
                <AbsoluteLayout HeightRequest="70" Margin="20,10,20,10">
                    <StackLayout Opacity="0.3" BackgroundColor="White"
                        AbsoluteLayout.LayoutBounds="0,0,1,1" 
                        AbsoluteLayout.LayoutFlags="All" />
                    <StackLayout AbsoluteLayout.LayoutBounds="0,0,1,1" 
                        AbsoluteLayout.LayoutFlags="All">
                        <Grid RowSpacing="0">
                            <Grid.RowDefinitions>
                                <RowDefinition Height="35" />
                                <RowDefinition Height="35" />
                            </Grid.RowDefinitions>

                            <Grid.ColumnDefinitions>
                                <ColumnDefinition Width="70" />
                                <ColumnDefinition Width="*" />
                                <ColumnDefinition Width="70" />
                            </Grid.ColumnDefinitions>

                            <Label Grid.Row="0" Grid.Column="1" Text="{Binding Name}" Margin="0,3,0,0"
                        FontAttributes="Bold" FontSize="24" TextColor="White" />
                            <Label Grid.Row="1" Grid.Column="1" Text="{Binding StateShown}" FontSize="18" TextColor="White" />

                            <!-- <Image Source="power" Grid.RowSpan="2" Grid.Column="2" Margin="5" /> -->
                            <controls:IconView x:Name="btnPower" Source="power" Grid.RowSpan="2" Grid.Column="2" Margin="5"
                                            Foreground="{Binding PowerStateColor}">
                                <controls:IconView.GestureRecognizers>
                                    <TapGestureRecognizer Command="{Binding Path=BindingContext.cmdTogglePower, Source={x:Reference MyListView}}" CommandParameter="{Binding Id}" />
                                </controls:IconView.GestureRecognizers>
                            </controls:IconView>
                        </Grid>
                    </StackLayout>
                </AbsoluteLayout>
            </ViewCell>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

现在我期望发生的是,当我单击 IconView 时,我更改了 IconView 颜色和带有 StateShown 绑定的标签。但是当我点击 IconView 时没有任何变化!

我究竟做错了什么?

错误 280 发现猴子

为您希望 UI 注意到的OnPropertyChanged每个属性添加方法调用DisplayedDevice

public class DisplayedDevice : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
    }

    private string name;
    public string Name
    {
        get
        {
            return name;
        }
        set
        {
            name = value;
            OnPropertyChanged();
        }
    }

    private int id;
    public int Id
    {
        get
        {
            return id;
        }
        set
        {
            Id = value;
            OnPropertyChanged();
        }
    }

    private string state;
    public string State
    {
        get
        {
            return state;
        }
        set
        {
            state = value;
            OnPropertyChanged();
        }
    }
    ......

}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Xamarin Forms ListView 分组内容未绑定

Xamarin Forms ListView数据绑定

Xamarin.Forms ListView绑定问题

Xamarin Forms ListView 文本未显示

使用Xamarin.Forms更新ListView

Xamarin.Forms绑定未更新标签ui

Xamarin Forms:访问数据绑定ListView项的View?

Xamarin Forms-绑定Listview进行延迟加载

如何在Xamarin.Forms中的ListView内绑定列表

Xamarin Forms - 根据绑定数据更改 ListView 中的图像

Xamarin Forms-如何在ListView中显示/绑定列表?

ListView中的Xamarin Forms命令绑定不起作用

Xamarin Forms:如何在ListView内绑定Xamarin.forms.Maps的位置值?

更新ObservableCollection Xamarin.Forms ListView之后发送空事件

创建列表后,如何更新Xamarin Forms ListView的ViewCell属性?

Xamarin.Forms-数据更改时ListView不会更新

xamarin.forms:ListView不更新为expexcted

Xamarin.Forms。优化ListView

xamarin.forms ListView ItemSelected

Xamarin Forms Listview 中的 TapGestureRecognition

Xamarin.Forms与数据触发器绑定-值未更新

自定义 ListView 绑定在 Xamarin.Forms 中不起作用

Xamarin Forms:如何使用绑定到 ListView 组合来自不同获取 Web 服务的值

如何将ListView.ItemTapped事件绑定到Xamarin Forms中的ViewModel命令?

将数据从 JSON 绑定到 ListView(Xamarin.Forms 跨平台 C#)

Xamarin.Forms (PRISM) - 将复选框绑定到 viewmodel 中的命令,在 listview itemsource 之外

Xamarin Forms ListView滚动UI问题

Xamarin.Forms ListView的内容大小

Xamarin Forms (Xaml) ListView 不显示图像