Autosuggestbox不显示结果WP8.1 Universal App

时间:2015-02-04 22:30:42

标签: windows-phone-8.1 mvvm-light autosuggest

autosuggestbox中的结果模板未显示,我不知道原因。我在应用程序中使用MVVM Light。我们来看看代码:)

在页面中:

<AutoSuggestBox x:Name="txtBusqueda" x:Uid="txtBusqueda" 
        ItemsSource="{Binding Lugares}"
        Grid.Row="1" Margin="24 24 24 12" 
        MaxSuggestionListHeight="4" AutoMaximizeSuggestionArea="True" 
        TextMemberPath="Nombre"
    >
    <i:Interaction.Behaviors>
            <core:EventTriggerBehavior EventName="TextChanged">
                <core:InvokeCommandAction Command="{Binding ChangeTextCommand}" CommandParameter="{Binding Text, ElementName=txtBusqueda}" />
            </core:EventTriggerBehavior>
        </i:Interaction.Behaviors>
        <AutoSuggestBox.ItemTemplate>
            <DataTemplate>
                <TextBlock Text="{Binding Nombre}" TextWrapping="Wrap" />
            </DataTemplate>
        </AutoSuggestBox.ItemTemplate>
    </AutoSuggestBox>

在VM中:

private List<LugarInfo> lugares;
public List<LugarInfo> Lugares
{
    get { return this.lugares; }
    set
    {
        if (this.lugares == value) return;
        this.lugares = value;
        RaisePropertyChanged(() => Lugares);
    }
}
public RelayCommand<string> ChangeTextCommand { get; set; }
this.ChangeTextCommand = new RelayCommand<string>(async (s) =>
{
    var result = await Api.GetInfoLugares(texto);
    List<LugarInfo> lugares = new List<LugarInfo>();
    foreach (var lugar in result)
    {
            lugares.Add(new LugarInfo()
            {
                Id = int.Parse(lugar.Id),
                Tipo = lugar.Tipo,
                Nombre = lugar.Nombre
            });
    }

    this.Lugares = lugares;
});

所以,你可以看到,不是太麻烦。 结果将返回并分配给属性: Results in code

问题是结果不会显示在控件中,如图中所示。 Autosuggest image 将不胜感激。

1 个答案:

答案 0 :(得分:1)

你的Lugares属性永远不会引发RaisePropertyChanged,因为在你的代码中你是在lugares中添加对象而不是将它分配给在setter中相同的This.Lugares,因此它不会引发属性更改并且UI不会更新。将代码更改为如下。

var myLugares = new List<LugarInfo>();
foreach (var lugar in result)
{
        myLugares.Add(new LugarInfo()
        {
            Id = int.Parse(lugar.Id),
            Tipo = lugar.Tipo,
            Nombre = lugar.Nombre
        });
}

this.Lugares = myLugares;