Xaml Xamarin.Froms帧背景颜色更改未显示
我有这样一个场景:一个列表视图,每个单元格都是一个框架。当显示列表时,所有帧背景颜色为白色,当我单击帧时,我希望颜色在blie中更改。我改变了颜色,但不清新。这是我的代码: 在xaml页面中Xaml Xamarin.Froms帧背景颜色更改未显示,xaml,xamarin,xamarin.forms,xamarin.android,xamarin.ios,Xaml,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有这样一个场景:一个列表视图,每个单元格都是一个框架。当显示列表时,所有帧背景颜色为白色,当我单击帧时,我希望颜色在blie中更改。我改变了颜色,但不清新。这是我的代码: 在xaml页面中 <pages:PopupPage.Resources> <local1:ChangeFrameBackgroudColor x:Key="ChangeFrameBackgroudColor" /> </ResourceDictionary>
<pages:PopupPage.Resources>
<local1:ChangeFrameBackgroudColor x:Key="ChangeFrameBackgroudColor" />
</ResourceDictionary>-->
</pages:PopupPage.Resources>
<ListView x:Name="IzberiFirmaListView" HasUnevenRows="True" ItemsSource="{Binding KorisnikFirmi}" SelectedItem="{Binding IzbranaFirmaId } " Header="{Binding}" ItemTapped="IzberiFirmaListView_ItemTapped">
<ListView.ItemTemplate >
<DataTemplate>
<local:ExtendedViewCell SelectedBackgroundColor="#2188ff" >
<StackLayout Padding="20, 10" >
<Frame x:Name="frameLabel" BorderColor="#2188ff" BackgroundColor="{Binding IsActive, Converter={StaticResource ChangeFrameBackgroudColor}}">
<Label FontAttributes="Bold" FontSize="18" TextColor="Black" Text="{Binding Naziv}" ></Label>
</Frame>
</StackLayout>
</local:ExtendedViewCell>
</DataTemplate>
</ListView.ItemTemplate>
<ListView.HeaderTemplate>
<DataTemplate>
<ContentView BackgroundColor="#006BE6" >
<Label Margin="10" HorizontalOptions="CenterAndExpand" Text="ОДБЕРЕТЕ ФИРМА" TextColor="White" FontSize="20" FontAttributes="Bold"/>
</ContentView>
</DataTemplate>
</ListView.HeaderTemplate>
</ListView>
在视图模型中
public List<SysDashFirma> KorisnikFirmi
{
get { return korisnikFirmi; }
set
{
if (korisnikFirmi != value)
{
korisnikFirmi = value;
SetProperty(ref korisnikFirmi, value);
OnPropertyChanged("KorisnikFirmi");
}
}
}
public void ChangeColorOnItemSelected(SysDashFirma firm)
{
if (_oldFirmSelected == firm)
{
//firm.BackColor = "#2188ff";
firm.IsActive = true;
UpdateSelectedFirmItemColor(firm);
}
else
{
if(_oldFirmSelected != null)
{
//_oldFirmSelected.BackColor = "#f5f5f5";
_oldFirmSelected.IsActive = false;
UpdateSelectedFirmItemColor(_oldFirmSelected);
}
// firm.BackColor = "#2188ff";
firm.IsActive = true;
UpdateSelectedFirmItemColor(firm);
}
_oldFirmSelected = firm;
}
private void UpdateSelectedFirmItemColor(SysDashFirma firm)
{
var index = KorisnikFirmi.IndexOf(firm);
KorisnikFirmi.Remove(firm);
KorisnikFirmi.Insert(index,firm);
}
公共列表KorisnikFirmi
{
获取{return korisnikFirmi;}
设置
{
如果(korisnikFirmi!=值)
{
korisnikFirmi=价值;
SetProperty(参考korisnikFirmi,值);
OnProperty变更(“KorisnikFirmi”);
}
}
}
已选择公共无效变更(Sysdahfirma公司)
{
如果(_oldFirmSelected==firm)
{
//firm.BackColor=“#2188ff”;
firm.IsActive=true;
更新选定的FirmItemColor(公司);
}
其他的
{
如果(_oldFirmSelected!=null)
{
//_oldFirmSelected.BackColor=“#f5”;
_oldFirmSelected.IsActive=false;
UpdateSelectedFirmItemColor(\u oldFirmSelected);
}
//firm.BackColor=“#2188ff”;
firm.IsActive=true;
更新选定的FirmItemColor(公司);
}
_oldFirmSelected=公司;
}
私有void UpdateSelectedFirmItemColor(SysDashFirma公司)
{
var指数=KorisnikFirmi.IndexOf(公司);
KorisnikFirmi.移除(固定);
KorisnikFirmi.插入(索引,公司);
}
在列表中进行了更改,标志已更改,可能无法刷新投标上下文以从一开始就转换为“全部读取”。使用iActive属性的OnPropertyChanged通知UI其更改
公共类公司:INotifyPropertyChanged
{
私有字符串name=“未知”;
公共字符串名
{
得到
{
返回名称;
}
设置
{
名称=值;
OnPropertyChanged();
}
}
私人住宅是活跃的;
公共福利活动
{
得到
{
回报是积极的;
}
设置
{
i活跃=价值;
OnPropertyChanged();
}
}
受保护的OnPropertyChanged无效([CallerMemberName]字符串propertyName=null)
{
PropertyChanged?.Invoke(这是新的PropertyChangedEventArgs(propertyName));
}
公共事件属性更改事件处理程序属性更改;
}
我建议单独更改IsActive
属性,因为不需要删除和添加该项
视图模型
公共类视图模型:INotifyPropertyChanged
{
....
....
私营企业旧选定企业;
上市公司旧选定公司
{
得到
{
返回旧选定公司;
}
设置
{
oldSelectedFirm=价值;
OnPropertyChanged();
}
}
...
...
}
Xaml.cs
void ListView\u itemtapted(System.Object sender,Xamarin.Forms.ItemTappedEventArgs e)
{
var tappedFirm=(即项目为公司);
var vm=(BindingContext作为ViewModel);
如果(vm.OldSelectedFirm!=null)
vm.OldSelectedFirm.IsActive=false;
tappedFirm.IsActive=true;
vm.OldSelectedFirm=tappedFirm;
}
我有一些疑问,您是否将OnPropertyChanged用于iActive属性?更改IsActive属性时是否触发转换器代码?(使用断点检查)我在SysDashFirma对象中有IsActive我在该列表中有Inotify更改所选公司的值时转换器不会触发您在列表中有Inotify,但您更改了SysDashFirma
对象的IsActive属性。IsActive
更改不会通知用户界面。请尝试将OnPropertyChanged添加到IsActive
属性。我遗漏了什么吗?只需要你选择一个,当你想选择另一个时,旧的背景需要再次变为白色与SelectMode single混合?我已经按照你的要求更改了(将IsActive设置为false为oldFirm,并在ViewModel中添加了一个属性为oldFirm),请立即检查。无法在ListView中更改选择颜色,因为没有用于该选择的API。是的,它正在工作。增加了在ISACTIVE中更改的属性,但我已经添加了在所有可观察到的公司集合中更改的属性为什么不随之更改?
public List<SysDashFirma> KorisnikFirmi
{
get { return korisnikFirmi; }
set
{
if (korisnikFirmi != value)
{
korisnikFirmi = value;
SetProperty(ref korisnikFirmi, value);
OnPropertyChanged("KorisnikFirmi");
}
}
}
public void ChangeColorOnItemSelected(SysDashFirma firm)
{
if (_oldFirmSelected == firm)
{
//firm.BackColor = "#2188ff";
firm.IsActive = true;
UpdateSelectedFirmItemColor(firm);
}
else
{
if(_oldFirmSelected != null)
{
//_oldFirmSelected.BackColor = "#f5f5f5";
_oldFirmSelected.IsActive = false;
UpdateSelectedFirmItemColor(_oldFirmSelected);
}
// firm.BackColor = "#2188ff";
firm.IsActive = true;
UpdateSelectedFirmItemColor(firm);
}
_oldFirmSelected = firm;
}
private void UpdateSelectedFirmItemColor(SysDashFirma firm)
{
var index = KorisnikFirmi.IndexOf(firm);
KorisnikFirmi.Remove(firm);
KorisnikFirmi.Insert(index,firm);
}