首页 > 解决方案 > Xamarin AutoSuggestBox 文本未从代码隐藏设置

问题描述

我尝试直接在代码中设置代码,并将其绑定到一个属性(并触发 PropertyChangedEventHandler)。但是前端没有更新。

我采用的方法似乎适用于某些本机控件(我为表单上的下一个控件调整了我的代码(一个将它的 ItemsSource 绑定到从我尝试绑定的相同值计算的属性的 Picker AutoSuggestBox 文本到。

我的 xml 看起来像这样。

 <forms:AutoSuggestBox x:Name="locationAutoSuggestBox" 
 PlaceholderText="Enter site"
 TextChanged="LocationAutoSuggestBox_TextChanged"
 QuerySubmitted="LocationAutoSuggestBox_QuerySubmitted"
 SuggestionChosen="LocationAutoSuggestBox_SuggestionChosen"
 Text="{x:Binding SelectedSiteStr, Mode=TwoWay}" />

<Picker x:Name="pickerShift" HorizontalOptions="FillAndExpand" 
Title="Select shift" ItemsSource="{x:Binding ShiftsForLocation}">
</Picker>

我的视图模型代码的相关部分如下所示。

    private Sites selectedSite;
    public Sites SelectedSite
    {
        get
        {
            return selectedSite;
        }
        set
        {
            selectedSite = value;
            if(selectedSite != null)
            {
                selectedSiteStr = selectedSite.SiteName;
                OnPropertyChanged("SelectedSiteStr"); 
                OnPropertyChanged("ShiftsForLocation");
            }
        }
    }

    private string selectedSiteStr = string.Empty;
    public string SelectedSiteStr
    {
        get
        {
            return selectedSiteStr;
        }
        set
        {
            if (value != null)
            {
                selectedSiteStr = value;
                if (AllSites != null)
                {
                    var site = AllSites.FirstOrDefault(x => x.SiteName.ToLower() == value.ToLower());
                    if (site != null)
                    {
                        selectedSite = site;
                    }
                }
            }
        }
    }        

    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        var changed = PropertyChanged;
        if (changed != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

与 ShiftsForLocation 的绑定正在工作(它是使用 selectedSite 计算的,但 SelectedSiteStr 的绑定不是,我可以跟踪从属性中提取正确值的代码。

我难住了。任何帮助表示赞赏。

乔什

标签: c#xamlxamarin

解决方案


如果其他人遇到它,我通过从 0.1.0 升级到 0.6.0 来修复它。我必须包含这个库的预发布版本,我不喜欢嵌入式设备,大部分时间都将超出移动/wifi 覆盖范围,但它似乎可以工作。

乔什


推荐阅读