ObservableCollection没有按预期工作,mvvm light

本文关键字:工作 mvvm light ObservableCollection | 更新日期: 2023-09-27 18:04:40

我所做的是一个搜索函数来搜索事件。我这里的问题是,当我进入页面并将我的ObservableCollection计数设置为0时,有一个属性会触发,但是在我的数据库中有事件详细信息。如何这应该有工作是,当我进入页面上有一个中继命令,执行和检索所有数据从数据库,并将其放入可观察的集合和显示事件名称到ListBox。如果我只在输入字符后才检测到事件

以下是我的代码:

xaml:

<Interactivity:Interaction.Behaviors>
    <Core:EventTriggerBehavior EventName="Loaded">
        <Core:InvokeCommandAction Command="{Binding Searchfromhomepage.EventSearch, Mode=OneWay}"/>
    </Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
<Grid x:Name="LayoutRoot">
    <Grid.ChildrenTransitions>
        <TransitionCollection>
            <EntranceThemeTransition/>
        </TransitionCollection>
    </Grid.ChildrenTransitions>
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>
    <!--<TextBox  x:Name="txtSearch" Background="White"  Text="{Binding Path=HomePage.TxtEntered, UpdateSourceTrigger=PropertyChanged}"  FontSize="30"  Height="57" Margin="19,10,19,0" Grid.Row="1" />-->

    <TextBox x:Name="txtTest2"  Text="{Binding Searchfromhomepage.Filter, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
    <Grid Grid.Row="1" x:Name="ContentRoot" Margin="19,9.667,19,0">
        <ListBox Background="Black"  x:Name="listBox" FontSize="26" Margin="0,10,0,0"  ItemsSource="{Binding Searchfromhomepage.FilteredNames, Mode=OneWay}">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock x:Name="txtEventName" TextWrapping="Wrap" Text="{Binding EventName}" Tapped="txtEventName_Tapped" IsTapEnabled="True" Foreground="White" Width="300" Margin="10,15,0,0" Height="55"/>
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>
    </Grid>

viewmodel代码:

private static ObservableCollection<Event> _searchEventCollection = new ObservableCollection<Event>();
public static ObservableCollection<Event> SearchEventCollection
{
    get { return _searchEventCollection; }
    set { _searchEventCollection = value; }
}
//search from homepage event section
private RelayCommand _eventSearch;
/// <summary>
/// Gets the EventSearch.
/// </summary>
public RelayCommand EventSearch
{
    get
    {  return _eventSearch
            ?? (_eventSearch = new RelayCommand(
            async () =>
            {
                SearchEventCollection.Clear();
                var eventList = await App.MobileService.GetTable<Event>().ToListAsync();
                foreach (Event ename in eventList)
                {
                    SearchEventCollection.Add(new Event
                    {
                        Id = ename.Id,
                        EventName = ename.EventName,
                        Date = ename.Date,
                        Location = ename.Location,
                        Desc = ename.Desc
                    });
                }
            }));
    }
}

private string filter;
public String Filter
{
    get
    {
        return this.filter;
    }
    set
    {
        this.filter = value;
        RaisePropertyChanged("FilteredNames");
    }
}
public List<Event> FilteredNames
{
    get
    {
        if (filter == "") 
        {
            return SearchEventCollection.ToList();
        }
        else
        {
            return (from name in SearchEventCollection where name.EventName.ToUpper().StartsWith(filter.ToUpper()) select name).ToList();
        }
    }
}
public searchfromhomepageViewModel()
{ 
    filter = "";
}

ObservableCollection没有按预期工作,mvvm light

在视图模型代码中设置_eventSearch命令,如下所示

public RelayCommand _eventSearch = new RelayCommand(EventSearch);