【问题标题】:Highlight the list-view selected item programatically in xamarin.forms在 xamarin.forms 中以编程方式突出显示列表视图选定项
【发布时间】:2019-08-30 08:50:02
【问题描述】:

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

我的要求究竟是什么:

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

我尝试过根据id将listview的选中项设置为发件人,但还是没用。

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

MyListView.SelectedItem = _myViewModel.Users[index];

我在谷歌上搜索过这个问题,并在 xamarin/xamarin.android/winforms 中找到了一些为相同案例提供解决方案的链接。但没有什么能解决我的问题,因为他们使用的属性在 xamarin.forms listview 中不可用。

以下是链接:

Xamarin Android ListView select item and change row color

How to select an item in a ListView programmatically?.

是否可以这样做。如果可以,是否有任何解决方法可以实现这一点。任何人都可以帮我解决这个问题。

谢谢。

【问题讨论】:

    标签: listview xamarin.forms


    【解决方案1】:

    解决方案:

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

        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;
        }
    

    在模型中:

    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;
            }
        }
    }
    

    在 xaml 中:

    <ListView x:Name="myListView">
        <ListView.ItemTemplate>
            <DataTemplate>
                <ViewCell>
                    <StackLayout Orientation="Horizontal" BackgroundColor="{Binding myBackColor}">
    
                    </StackLayout>
    
                </ViewCell>
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>
    

    【讨论】:

      【解决方案2】:

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

      您可以创建 Custom view cellList view 并将背景颜色添加到选定的视图单元格。

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

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-06-10
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      • 2013-10-26
      相关资源
      最近更新 更多