以编程方式在xamarin.forms中突出显示列表视图所选项目

时间:2019-04-09 06:28:55

标签: listview xamarin.forms

我正在尝试开发wpf聊天应用程序。我一直在到处寻找在ListView中选择项目并更改行的颜色以使用户知道以编程方式选择了哪一行的方法。

我的确切要求是:

登录该应用程序后,用户可以查看频道和联系人列表,并且当用户向他发送消息时,已登录的用户会收到一条通知,如果用户单击该通知,则消息发件人联系人应为突出显示以使用户知道打开了哪个聊天。

我尝试根据ID将listview的选定项设置为发件人,但仍然没有用。

var index = _myViewModel.Users.IndexOf(selectedUser);

MyListView.SelectedItem = _myViewModel.Users[index];

我已经对此进行了搜索,并在xamarin / xamarin.android / winforms中找到了一些提供相同情况解决方案的链接。但没有任何方法可以解决我的问题,因为它们使用的属性在xamarin.forms列表视图中不可用。

以下是链接:

Xamarin Android ListView select item and change row color

How to select an item in a ListView programmatically?

是否可以这样做。如果是,是否有任何解决方法来实现这一目标。有人可以帮助我吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

您可以参考上一篇文章中给出的答案: ListView not unselecting

您可以在Custom view cell中创建List view,并为选定的视图单元格添加背景色。

希望这可以解决您的问题。

答案 1 :(得分:0)

解决方案:

您可以将Cell的背景颜色与模型中的属性绑定。当用户单击该通知时,更改模型中特定单元格的背景颜色,然后它将在列表视图中更改:

print("x.service = \(x.service)")

在模型中:

    private void ClickNotification(object sender, EventArgs e)
    {
        var index = _myViewModel.Users.IndexOf(selectedUser);

        //change the background color of the specific cell in model
        myModel model = _myModelList[index];
        model.myBackColor = Color.Blue;
    }

在xaml中:

class myModel : INotifyPropertyChanged
{
    Color backColor;

    public event PropertyChangedEventHandler PropertyChanged;

    public myModel( Color myColor)
    {
        backColor = myColor;
    }

    public Color myBackColor
    {
        set
        {
            if (backColor != value)
            {
                backColor = value;

                if (PropertyChanged != null)
                {
                    PropertyChanged(this, new PropertyChangedEventArgs("myBackColor"));
                }
            }
        }
        get
        {
            return backColor;
        }
    }
}