我已经开始用.NET MAUI编程了,遇到了一个小问题。不管怎么说,我试着在删除一个注解时自动更新我的列表视图。删除注解到目前为止有效。更新还没有,我该怎么做呢?
我试图解决我的问题的帮助下,各种职位在不同的在线论坛,但这些职位都没有帮助,所以我创建自己的。
我的代码到目前为止:
XAML:
<RefreshView
IsRefreshing="{Binding IsRefreshing}"
Command="{Binding RefreshCommand}"
RefreshColor="Black"
Refreshing="Refresh"
x:Name="myRefreshView"
>
<VerticalStackLayout>
<ScrollView>
<StackLayout>
<Grid>
<Grid.RowDefinitions>
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<Image
Grid.Column="0"
Source="logo.png"
WidthRequest="150"
HorizontalOptions="Start"
VerticalOptions="Start"
/>
<Label
TextColor="Black"
Grid.Column="1"
Text="TODO"
FontSize="35"
HorizontalOptions="Start"
VerticalOptions="Start"
Margin="23"
/>
</Grid>
<Grid BackgroundColor="#24D4A3">
<Grid.RowDefinitions>
<RowDefinition />
<RowDefinition />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListView
Grid.ColumnSpan="2"
Grid.RowSpan="2"
RowHeight="100"
x:Name="listview"
ItemsSource="{Binding Notes}
"
>
<ListView.ItemTemplate>
<DataTemplate >
<ViewCell >
<Grid BackgroundColor="#24D4A3"
>
<Grid.RowDefinitions>
<RowDefinition Height="auto"/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="auto"/>
</Grid.ColumnDefinitions>
<Button BackgroundColor="#DEABF5"
Text="{Binding Title}"
BorderWidth="2"
TextColor="Black"
FontSize="28"
Margin="20"
CornerRadius="100"
WidthRequest="350"
HeightRequest="70"
HorizontalOptions="Center"
VerticalOptions="Start"/>
<Button
BindingContext="{Binding Id}"
Clicked="ToDoSolved"
BorderWidth="2"
BorderColor="Black"
BackgroundColor="White"
WidthRequest="45"
HeightRequest="45"
CornerRadius="35"
Margin="0,0,260,0"
/>
</Grid>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
<ImageButton
Clicked="Settings"
Source="settings.png"
Grid.Row="0"
Grid.Column="2"
BorderColor="#2b3c3c"
BorderWidth="0"
BackgroundColor="#34A4EB"
CornerRadius="35"
HorizontalOptions="End"
WidthRequest="70"
HeightRequest="70"
Margin="0,10, 10, 0"
VerticalOptions="Start"/>
<ImageButton
Clicked="CreateNote"
Source="add.png"
Grid.Row="1"
Grid.Column="2"
BorderColor="#2b3c3c"
BorderWidth="0"
BackgroundColor="#34A4EB"
CornerRadius="35"
HorizontalOptions="End"
WidthRequest="70"
HeightRequest="70"
Margin="0,0,10,10" />
</Grid>
</StackLayout>
</ScrollView>
</VerticalStackLayout>
</RefreshView>
C#主页:
public partial class MainPage : ContentPage
{
private List<Note> notes = new List<Note>();
public List<Note> Notes
{
get { return notes; }
set { notes = value; }
}
public MainPage()
{
InitializeComponent();
notes.Add(new Note(0, "My Note1", "I'm ugly"));
notes.Add(new Note(1, "My Note2", "I'm short"));
notes.Add(new Note(2, "My Note3", "I'm smart"));
notes.Add(new Note(3, "My Note4", "I'm smart"));
this.BindingContext= Notes;
listview.ItemsSource= Notes;
}
private async void CreateNote(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//CreateNote");
}
private async void Settings(object sender, EventArgs e)
{
await Shell.Current.GoToAsync("//Settings");
}
private void ToDoSolved(object sender, EventArgs e)
{
Button button= (Button) sender ;
var id = (int)button.BindingContext;
var item = Notes.SingleOrDefault(x => x.Id == id);
if (item != null)
{
Notes.Remove(item);
Console.WriteLine(id);
}
Refresh(sender, e);
}
async void Refresh(object sender, EventArgs e)
{
await Task.Delay(1000);
this.BindingContext = Notes;
listview.ItemsSource = Notes;
myRefreshView.IsRefreshing = false;
}
}
和我的“笔记本”
public class Note
{
public ObservableCollection<Note> ob_notes = new ObservableCollection<Note>();
public ObservableCollection<Note> Notes { get { return ob_notes; } }
public Note (int id, string title, string body)
{
this.Body = body;
this.Id = id;
this.Title = title;
}
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
1条答案
按热度按时间ie3xauqp1#
您可以像下面这样使用
RefreshView
,我简化了您的代码,使其简洁但切中要害。要删除项目,因为您使用的是ListView
,所以可以使用ItemSelected
方法删除选定的项目。详细信息,请参阅响应项目选择。代码隐藏:
Xaml:
注: