【问题标题】:After removing selected item from list view, binding doesn't change从列表视图中删除选定项目后,绑定不会改变
【发布时间】:2018-12-25 19:07:44
【问题描述】:

我正在编写 xamarin 表单应用程序,但从 ListView 绑定 SelectedItem 时遇到问题。一切都很好,直到 SelectedItemObservableCollection 中删除。此操作后SelectedItem 仍包含先前的值,但应该等于null

为什么它不起作用以及如何修复它。

    <ListView ItemsSource="{Binding Clients}" SelectionMode="Single" SelectedItem="{Binding SelectedSocket}">
        <ListView.ItemTemplate>
            <DataTemplate>
                <TextCell Text="{Binding HostEntry.HostName}" />
            </DataTemplate>
        </ListView.ItemTemplate>
    </ListView>

public ObservableCollection<TcpSocket> Clients { get; set; } = new ObservableCollection<TcpSocket>();
private TcpSocket _SelectedSocket { get; set; }
public TcpSocket SelectedSocket
{
    get => _SelectedSocket;
    set
    {
        _SelectedSocket = value;
        PropertyChanged(this, new PropertyChangedEventArgs(nameof(SelectedSocket)));
    }
}

点击按钮后类似:

Clients.Remove(SelectedSocket);

【问题讨论】:

  • 然后手动设置为空
  • 但我不知道为什么它不单独改变
  • 你能提供一些你的代码吗?绑定xaml和ViewModel selectedItem属性,怎么去掉?
  • 您必须至少共享显示绑定的 XAML 或代码以及绑定的代码源。
  • 好的 ...我现在认为您正在从可观察集合中删除 SelectedItem ,但它不会引发 SelectedItem 属性更改,因此您应该在删除 SelectedItem 时做来自 ObservableCollection,手动提升它。

标签: c# forms xamarin


【解决方案1】:

在将所需属性从集合中删除后手动将其设置为 null,以便更改的属性甚至可以引发。

//...

public void OnClick(object sender, EventArgs e) {
    Clients.Remove(SelectedSocket); //raises collection changed
    SelectedSocket = null; //raises property changed
}

//...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多