【问题标题】:ListView's ItemsSource binding not pushing changes to sourceListView 的 ItemsSource 绑定未将更改推送到源
【发布时间】:2011-09-21 15:32:19
【问题描述】:

我正在使用 WPF 和 Mvvm,我的 ListView 将其 ItemSource 绑定到 ICollectionView。如何处理选中项更改事件?

最初我将 DataGrid 的 ItemSource 绑定到同一个 ICollectionView 并设置集合的 CurrentChanged 事件。一切正常,但 ListView 并非如此。

【问题讨论】:

    标签: wpf mvvm


    【解决方案1】:

    正如 Thomas 所提到的,您所要做的就是将列表框的 SelectedItem 属性绑定到视图模型中的属性。为了清楚起见,这里有一个例子。

    这是我的看法

       <Grid x:Name="LayoutRoot" Background="White">
            <ListView ItemsSource="{Binding Contacts}" SelectedItem="{Binding SelectedContact, Mode=TwoWay}">
                <ListView.ItemTemplate>
                    <DataTemplate>
                        <TextBlock Text="{Binding Name}" />
                    </DataTemplate>
                </ListView.ItemTemplate>
            </ListView>
        </Grid>   
    

    这是我的 ViewModel

    public class MainViewModel: ViewModelBase
    {
        ObservableCollection<ContactViewModel> contacts;
        ContactViewModel selectedContact;
    
        public ContactViewModel SelectedContact
        {
            get { return selectedContact; }
            set {
                selectedContact = value;
                base.OnPropertyChanged("SelectedContact"); 
            }
        } 
    
        public ObservableCollection<ContactViewModel> Contacts
        {
            get { return contacts; }
            set { 
                contacts = value;
                base.OnPropertyChanged("Contacts"); 
            }
        }
    }
    

    每次您尝试更改列表框中的选择时,您都会进入 SelectedContact 的设置器。

    set 
    { 
         contacts = value;
         base.OnPropertyChanged("Contacts"); 
    }
    

    通过此操作,您将知道所选联系人已更改。

    使用属性 SelectedContact,您还可以知道您的集合中的哪个项目被选中。

    如果要实现多选,还可以将 ViewModel 中的 Collection 属性绑定到 ListView 的 SelectedItems 属性。

    【讨论】:

      【解决方案2】:

      只需将 ListViewSelectedItem 绑定到 ViewModel 的属性

      【讨论】:

        猜你喜欢
        • 2018-08-02
        • 2011-01-14
        • 1970-01-01
        • 2012-01-08
        • 2014-01-26
        • 1970-01-01
        • 1970-01-01
        • 2020-07-12
        • 2014-12-08
        相关资源
        最近更新 更多