我尝试将边框的背景绑定到CollectionView中的LinearGradientBrush,其他项目的背景也会发生变化
公共对象
public partial class CommonObject:ObservableObject
{
[ObservableProperty]
bool showSubmenu = false;
}
对象
public partial class Product :CommonObject
{
ResourceDictionary rd = App.Current.Resources.MergedDictionaries.First();
[ObservableProperty]
string id = "";
[ObservableProperty]
string name = "";
[ObservableProperty]
string description = "";
[ObservableProperty]
string categoryId = "";
[ObservableProperty]
string barcode = "";
[ObservableProperty]
decimal salePriceExclVat = 0.00m;
[ObservableProperty]
decimal salePrice = 0.00m;
[ObservableProperty]
string saleTaxRateId = "";
[ObservableProperty]
decimal eatOutPriceExclVat = 0.00m;
[ObservableProperty]
decimal eatOutPrice = 0.00m;
[ObservableProperty]
string eatOutTaxRateId = "";
[ObservableProperty]
decimal costPriceExclVat = 0.00m;
[ObservableProperty]
decimal costPrice = 0.00m;
[ObservableProperty]
string costTaxRateId = "";
[ObservableProperty]
string brandId = "";
[ObservableProperty]
string supplierId = "";
[ObservableProperty]
string popUpInfoId = "";
[ObservableProperty]
string mainUnitOfMeasureId = "";
[ObservableProperty]
bool trackStock = false;
[ObservableProperty]
int posOrder = 0;
[ObservableProperty]
bool isSellOnPos = false;
[ObservableProperty]
bool isFavorite = false;
[ObservableProperty]
bool isSellOnSelfService = false;
[ObservableProperty]
bool isSellOnAllLocations = false;
[ObservableProperty]
bool isVariablePrice = false;
[ObservableProperty]
bool isSoldByWeight = false;
[ObservableProperty]
bool isComposite = false;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsNotSelected))]
bool isSelected = false;
[ObservableProperty]
[NotifyPropertyChangedFor(nameof(IsSelected))]
bool isNotSelected = true;
[ObservableProperty]
double opacity = 150;
[ObservableProperty]
decimal quantity = 0;
[ObservableProperty]
Discount discount = null;
[ObservableProperty]
bool hasDiscount = false;
[ObservableProperty]
bool val = false;
[ObservableProperty]
bool proc = false;
[ObservableProperty]
LinearGradientBrush bgColor = new LinearGradientBrush();
[ObservableProperty]
Color textColor = Color.FromRgb(0, 0, 0);
[ObservableProperty]
Color pTextColor = Color.FromRgb(241, 100, 63);
partial void OnIsSelectedChanged(bool value)
{
try
{
IsNotSelected = !value;
Opacity = value==true ? 0 : 150;
if (value)
{
if (BgColor != (LinearGradientBrush)rd["SelectedItemGradient"])
BgColor = rd["SelectedItemGradient"] as LinearGradientBrush;
if (TextColor != Color.FromRgb(255, 255, 255))
TextColor = Color.FromRgb(255, 255, 255);
if (PTextColor != Color.FromRgb(255, 255, 255))
PTextColor = Color.FromRgb(255, 255, 255);
}
if (!value)
{
if (BgColor != (LinearGradientBrush)rd["NotSelectedItemGradient"])
BgColor = rd["NotSelectedItemGradient"] as LinearGradientBrush;
if (TextColor != Color.FromRgb(0, 0, 0))
TextColor = Color.FromRgb(0, 0, 0);
if (PTextColor != Color.FromRgb(241, 100, 63))
PTextColor = Color.FromRgb(241, 100, 63);
}
}
catch (Exception ex)
{
;
}
}
}
和产品的CustomView
<?xml version="1.0" encoding="utf-8" ?>
<Grid xmlns="http://schemas.microsoft.com/dotnet/2021/maui"
xmlns:ObjectModel="clr-namespace:MicroPos.Models.ObjectModels"
x:DataType="ObjectModel:Product"
xmlns:ViewModel="clr-namespace:MicroPos.ViewModels"
xmlns:Converter="clr-namespace:MicroPos.Converters"
Margin="0" Padding="0" BackgroundColor="Transparent" InputTransparent="False"
xmlns:xct="http://schemas.microsoft.com/dotnet/2022/maui/toolkit"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
x:Class="MicroPos.Views.Custom.ProductView">
<Grid.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type ViewModel:PosPageViewModel }},Path=AddProductCommand}" CommandParameter="{Binding .}"/>
</Grid.GestureRecognizers>
<Grid RowDefinitions="*,30" Margin="0,10,15,0" InputTransparent="True" CascadeInputTransparent="True" IsClippedToBounds="False" HeightRequest="115" WidthRequest="106">
<Border Background="{Binding BgColor}" Stroke="Transparent" IsVisible="true" StrokeThickness="0" InputTransparent="True" Grid.Row="0" Grid.RowSpan="2"
Margin="0" Padding="0" HorizontalOptions="Fill" VerticalOptions="Fill">
<Border.GestureRecognizers>
<TapGestureRecognizer Command="{Binding Source={RelativeSource AncestorType={x:Type ViewModel:PosPageViewModel }},Path=AddProductCommand}" CommandParameter="{Binding .}"/>
</Border.GestureRecognizers>
<Border.StrokeShape>
<RoundRectangle CornerRadius="8,8,8,8" />
</Border.StrokeShape>
</Border>
<Label Text="{Binding Name}" Margin="2,5,2,0" Grid.Row="0" InputTransparent="True"
TextColor="{Binding TextColor}"
FontSize="15" FontFamily="RobotoMedium" HorizontalOptions="Fill" VerticalOptions="Fill" HorizontalTextAlignment="Center"/>
<Label Text="{Binding SalePrice}" Grid.Row="1" InputTransparent="True"
Margin="0,0,0,5" HorizontalTextAlignment="Center"
FontSize="18" FontFamily="RobotoMedium" HorizontalOptions="Center" VerticalOptions="End">
<Label.FormattedText>
<FormattedString>
<Span Text="{Binding SalePrice}" FontSize="15" FontFamily="RobotoMedium" TextColor="{Binding PTextColor}"/>
<Span Text=" RON" FontSize="13" FontFamily="RobotoMedium" TextColor="{Binding PTextColor}"/>
</FormattedString>
</Label.FormattedText>
</Label>
</Grid>
<Border BackgroundColor="{StaticResource Main}" InputTransparent="True"
AbsoluteLayout.LayoutFlags="PositionProportional" AbsoluteLayout.LayoutBounds="1,0"
WidthRequest="25" HeightRequest="25"
HorizontalOptions="End" Margin="0,0,2,0" Padding="0" IsVisible="{Binding IsSelected}"
VerticalOptions="Start" Grid.Row="0">
<Border.StrokeShape>
<RoundRectangle CornerRadius="25,25,25,25" />
</Border.StrokeShape>
<Label Text="{Binding Quantity}" Margin="0" Grid.Row="0" InputTransparent="True"
TextColor="White"
FontSize="12" FontFamily="RobotoRegular" HorizontalOptions="Fill" VerticalOptions="Fill" VerticalTextAlignment="Center" HorizontalTextAlignment="Center"/>
</Border>
</Grid>
集合视图
<CollectionView x:Name="collection" ItemsSource="{Binding Products}" ItemTemplate="{Binding ViewType}" HorizontalScrollBarVisibility="Never"
ItemsUpdatingScrollMode="KeepScrollOffset" Margin="10,0,0,0" ItemSizingStrategy="MeasureFirstItem"
Grid.Row="2" ItemsLayout="{Binding Layout}" HorizontalOptions="FillAndExpand" BackgroundColor="Transparent" />
行为视频
https://youtube.com/shorts/JmHHzm2XoI4
请帮助我,我真的不知道该怎么做,而且collectionview非常落后。
1条答案
按热度按时间hjzp0vay1#
首先,使用setter样式并利用这种视觉状态。
或者...使用触发器。
第二,我敢打赌你认为CollectionView是滞后的,因为你是在调试。如果你改变到发布,它将加快数量级。总是测试发布性能。你永远不知道有多少跟踪器/记录器在调试中扰乱你的程序。
试试这个,告诉我怎么样。