在ItemSelected-ListView-Xamarin表单上添加复选标记图像

在ItemSelected-ListView-Xamarin表单上添加复选标记图像,listview,xamarin.forms,expandablelistview,listviewitem,Listview,Xamarin.forms,Expandablelistview,Listviewitem,我想在选中某个项目时添加复选标记图像。请参见下文 我试着强迫IsChecked为真,只是为了看看img。但似乎什么都不管用 xaml C# observedcollection employees=新的observedcollection(); 公共ObservableCollection雇员{get{return Employees;}} EmployeeView.ItemsSource=员工; //ObservableCollection允许在ItemsSource之后添加项 //已设

我想在选中某个项目时添加复选标记图像。请参见下文

我试着强迫IsChecked为真,只是为了看看img。但似乎什么都不管用

xaml


C#

observedcollection employees=新的observedcollection();
公共ObservableCollection雇员{get{return Employees;}}
EmployeeView.ItemsSource=员工;
//ObservableCollection允许在ItemsSource之后添加项
//已设置,UI将对更改作出反应
添加(新员工{name=“Rob Finnerty”});
Add(新雇员{name=“Bill Glapter”});
添加(新员工{name=“Geri Beth Hooper博士”});
添加(新员工{name=“Keith Joyce Purdy博士”});
添加(新员工{name=“Sheri Spruce”});
Add(新员工{name=“Burt Indybrick”,IsChecked=true});
void EmployeeView_items(对象发送者,Xamarin.Forms.selecteditemchangedventargs e)
{
如果(如SelectedItem!=null)
{
var指数=(员工)e.SelectedItem;
index.IsChecked=true;
}

如果每个图像都是相同的,只需对源代码进行硬编码而不是绑定。相反,请绑定
IsVisible
属性

<Image Source="checkmark.png" IsVisible="{Binding IsChecked}" x:Name="tickimage">

如果每个图像都相同,只需对源代码进行硬编码而不是绑定。相反,绑定
IsVisible
属性

<Image Source="checkmark.png" IsVisible="{Binding IsChecked}" x:Name="tickimage">

您的
Employee
类是否实现了
INotifyPropertyChanged
如:

public class Employee: INotifyPropertyChanged
{
    public string name { get; set; }
    public bool isChecked;

    public bool IsChecked
    {
        set
        {
            if (isChecked != value)
            {
                isChecked = value;
                OnPropertyChanged("IsChecked");

            }
        }
        get
        {
            return isChecked;
        }
    }

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

您的
Employee
类是否实现了
INotifyPropertyChanged
如:

public class Employee: INotifyPropertyChanged
{
    public string name { get; set; }
    public bool isChecked;

    public bool IsChecked
    {
        set
        {
            if (isChecked != value)
            {
                isChecked = value;
                OnPropertyChanged("IsChecked");

            }
        }
        get
        {
            return isChecked;
        }
    }

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

请同时添加触发器以根据真假值更改图像 像这样

<Image
                                    x:Name="starImage"
                                    Aspect="AspectFit"
                                    HeightRequest="24"
                                    HorizontalOptions="End">
                                    <Image.GestureRecognizers>
                                        <TapGestureRecognizer Tapped="NotificationStarred" />
                                    </Image.GestureRecognizers>
                                    <Image.Triggers>
                                        <DataTrigger
                                            Binding="{Binding Path=IsImportant}"
                                            TargetType="Image"
                                            Value="True">
                                            <Setter Property="Source" Value="StarSelected.png" />
                                        </DataTrigger>

                                        <DataTrigger
                                            Binding="{Binding Path=IsImportant}"
                                            TargetType="Image"
                                            Value="False">
                                            <Setter Property="Source" Value="StarUnselected.png" />
                                        </DataTrigger>
                                    </Image.Triggers>
                                </Image>

请同时添加触发器以根据真-假值更改图像 像这样

<Image
                                    x:Name="starImage"
                                    Aspect="AspectFit"
                                    HeightRequest="24"
                                    HorizontalOptions="End">
                                    <Image.GestureRecognizers>
                                        <TapGestureRecognizer Tapped="NotificationStarred" />
                                    </Image.GestureRecognizers>
                                    <Image.Triggers>
                                        <DataTrigger
                                            Binding="{Binding Path=IsImportant}"
                                            TargetType="Image"
                                            Value="True">
                                            <Setter Property="Source" Value="StarSelected.png" />
                                        </DataTrigger>

                                        <DataTrigger
                                            Binding="{Binding Path=IsImportant}"
                                            TargetType="Image"
                                            Value="False">
                                            <Setter Property="Source" Value="StarUnselected.png" />
                                        </DataTrigger>
                                    </Image.Triggers>
                                </Image>


为什么不绑定图像的IsVisible to IsChecked?触发器似乎没有必要。为什么不绑定图像的IsVisible to IsChecked?触发器似乎没有必要。但此图像必须在列表之外?我不知道这意味着什么。我尝试过你的方法,但没有运气。visible没有得到触发器呃。您确定源代码正确吗?没有扩展名的“日历”看起来不正确。是的,您可以使用它,也可以不使用扩展名。它显示在此处employees.Add(新员工{name=“Burt Indybrick”,IsChecked=true});但不在所选项目上,但此图像必须在列表之外?我不知道这意味着什么。我尝试了您的方法,但没有成功。可见的未触发。您确定来源正确吗?“日历”没有扩展名看起来不正确。是的,您可以使用扩展名,也可以不使用扩展名。它显示在这里employees.Add(新员工{name=“Burt Indybrick”,IsChecked=true});但不在所选项目上谢谢这是错误notify属性未被调用。非常感谢您的两个答案对我帮助很大。谢谢这是错误notify属性未被调用。非常感谢您的两个答案对我帮助很大。