gpt4 book ai didi

c# - 创建 MVVM 搜索页面 Xamarin

转载 作者:行者123 更新时间:2023-12-03 10:33:28 25 4
gpt4 key购买 nike

我想使用 MVVM 创建 Xamarin 搜索页面。我在我的 MainWindowViewModel 中创建了一个逻辑,一旦用户在搜索器中输入了一个字符,它就必须更新我的 ListView。但我有这样的结果:In some reason UI is not updating

我不知道我做错了什么。
而且我想异步调用 ExecuteSearchCommand,如果你展示如何正确实现它,我会很高兴。
谢谢。

  <ContentPage.BindingContext>
<ViewModels:MainWindowViewModel/>
</ContentPage.BindingContext>

<ContentPage.Content>
<StackLayout>

<SearchBar SearchCommand="{Binding SearchCommand}"
Text="{Binding EnteredText}"
/>
<Label Text="{Binding EnteredText}"></Label>
<ListView x:Name="lstContatos" ItemsSource="{Binding MyList}" HasUnevenRows="True">
<ListView.ItemTemplate>
<DataTemplate>
<ViewCell>
<StackLayout>
<Grid MinimumHeightRequest="80" HeightRequest="120" HorizontalOptions="FillAndExpand" >
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>

<Label Grid.Row="0" Text="{Binding PhrasalVerb}"/>
<Button Text="Delete" Grid.Column="1" BackgroundColor="Black" HeightRequest="30" WidthRequest="40" IsVisible="True"/>

</Grid>
</StackLayout>
</ViewCell>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</StackLayout>
</ContentPage.Content>

这是我绑定(bind)到 View 的 View 模型
        public string EnteredText
{
get { return enteredText; }
set
{
enteredText = value;
this.SearchCommand.Execute(null);
OnPropertyChanged(nameof(EnteredText));
}
}


void ExecuteSearchCommand(object parameter)
{
if (enteredText.Length>=1)
{
MyList = new ObservableCollection<PhV_Get>(phrasalVerbGet
.Where(x => x.PhrasalVerb.ToLower()
.Contains(enteredText.ToLower())).ToList());
}
else
{
MyList = phrasalVerbGet;
}

}

public ObservableCollection<PhV_Get> MyList
{
set
{
phrasalVerbGet = value;
OnPropertyChanged(nameof(MyList));
}
get
{
return phrasalVerbGet;
}
}

public Command SearchCommand {
get
{
return new Command(ExecuteSearchCommand,
CanExecuteSeachCommand);
}
}

public bool CanExecuteSeachCommand(object parameter)
{
return true;
}


public event PropertyChangedEventHandler PropertyChanged;

private void OnPropertyChanged(string propertyName)
{
this.PropertyChanged?.Invoke(this, new
PropertyChangedEventArgs(propertyName));
}

最佳答案

MyList = new ObservableCollectionExecuteSearchCommand是禁忌。您的 ListView 绑定(bind)到旧的 ObservableCollection - 当您创建一个新的时,您会破坏该绑定(bind)并且 View 不会更新,因为它对新的一无所知。

当您需要更改可观察集合的内容时,请这样做(在伪代码中):

MyList.Clear();
foreach (thing in myListOfThings)
{
MyList.Items.Add(thing);
}

这样,您将更新 ListView 绑定(bind)到的集合,并且 ListView 将看到更改。

关于c# - 创建 MVVM 搜索页面 Xamarin,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44831382/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com