【问题标题】:Xamarin.Forms Picker`s ItemDisplayBinding doesn't change displayed text when property on object changes当对象上的属性发生更改时,Xamarin.Forms Picker 的 ItemDisplayBinding 不会更改显示的文本
【发布时间】:2018-03-13 13:03:27
【问题描述】:

我有一个 xaml 代码:

<Picker ItemsSource="{Binding profiles}" ItemDisplayBinding="{Binding name}" SelectedItem="{Binding selectedProfile}" HorizontalOptions="FillAndExpand" Margin="0, 0, 20, 0" VerticalOptions="Center"/>

在我定义的cs文件中:

BindingContext = this;

    private ObservableCollection<Profile> _profiles = new ObservableCollection<Profile>();
    public ObservableCollection<Profile> profiles
    {
        get { return _profiles; }
        set { _profiles = value; }
    }

配置文件类是:

public class Profile
{
    private string _name = "New profile";
    public string name
    {
        get { return _name; }
        set {
            _name = value;
        }
    }
}

当我添加/删除元素并在下拉列表或代码中选择新元素(selectedProfile = profiles[index])时,它可以正常工作。 但是当我尝试重命名配置文件时会出现问题。我更改了个人资料名称,但 Picker 没有更新它,我看到了旧值。

我也试过这个。但是现在的结果。

public class Profile : INotifyPropertyChanged
{
    private string _name = "New profile";
    public string name
    {
        get { return _name; }
        set {
            _name = value;
            OnPropertyChanged("name");
        }
    }        
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }        
}

【问题讨论】:

  • 为您的 Profile 类实现 INotifyPropertyChanged 接口
  • 杰拉德,我更新了帖子,没用

标签: c# xamarin binding xamarin.forms


【解决方案1】:

因此,您想要更新列表中某个项目内的信息。这是我如何做到这一点的答案:

How to update informations inside a item on a list

你可能会适应你的需要,但我想这将有助于指导你。

【讨论】:

    【解决方案2】:

    'ItemDisplayBinding' 不是可绑定属性,这就是我认为您无法通知它的原因。
    您必须创建一个自定义选择器。

    【讨论】:

      【解决方案3】:

      这个问题我遇到过好几次了。

      这里是更新链接到ObservableCollection&lt;T&gt; 类型源的选择器的简单解决方案:

      var l_nIndex = Items.IndexOf(SelectedItem);
      
      Items.Move(l_nIndex, l_nIndex);
      
      RaisePropertyChanged(nameof(SelectedItem));
      

      Items 属性是Item 的集合,它是ObservableCollection&lt;Item&gt;

      SelectedItem 是绑定属性,表示选择器中选中的Item

      这是在视图中创建选择器的 xaml 代码:

      <Picker ItemsSource="{Binding Items}" SelectedItem="{Binding SelectedItem, Mode=TwoWay}" />
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-08-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-09-14
        • 1970-01-01
        • 2011-01-26
        相关资源
        最近更新 更多