在ItemSelected-ListView-Xamarin表单上添加复选标记图像
我想在选中某个项目时添加复选标记图像。请参见下文 我试着强迫IsChecked为真,只是为了看看img。但似乎什么都不管用 xaml在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之后添加项 //已设
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属性未被调用。非常感谢您的两个答案对我帮助很大。