DataView usage combind with event and ViewModel From ERP-DEV

reflesh the selected item in DataView

when we use DataView to display a set of data. Generally, we binding the selected item to our object in ViewModel. Then, we can modify the selected item to reflesh ui. How we do it?

  1. Relative Class

    ObservableCollection
    we usually use this type to host our data source. and binding the data source of ui element to this. So, if any add or delete operation, it will
    reflect back to ui automatically.

    ListCollectionView
    This class is used to get the view of the ui element. WPF has alreadly done some background work. it use the datasource
    to generate the View object and present it into the ui. so, if we hope to operate the ui. we need the view class not the
    data source.

  2. Sample Code

Xaml:

  <ListView Grid.Row="1" Margin="5" Background="LightYellow" Name="lstProducts" ItemsSource="{Binding Products, Mode=TwoWay}" SelectedItem="{Binding SelectedProduct, Mode=TwoWay}" SelectionChanged="selectedItemChanged">
                <ListView.View>
                    <GridView AllowsColumnReorder="True" >
                        <GridViewColumn DisplayMemberBinding="{Binding ProductName}" Header="产品名称" Width="200"/>
                        <GridViewColumn DisplayMemberBinding="{Binding ProductSize}" Header="产品大小" Width="200"/>
                    </GridView>
                </ListView.View>                
            </ListView>

Xaml.cs event:

 private void selectedItemChanged(object sender, SelectionChangedEventArgs e)
        {
            ListView lv = sender as ListView;
            ListCollectionView lcv = (ListCollectionView)CollectionViewSource.GetDefaultView(lv.ItemsSource);
            lcv.MoveCurrentTo(lv.SelectedItem);
        }

ViewModel:

 #region public properties
        public ObservableCollection<ProductDataVM> Products
        {
            get
            {
                return _products;
            }
            set
            {
                _products = value;
                RaisePropertyChanged("");
            }
        }
        public ProductDataVM SelectedProduct
        {
            get
            {
                return _selectedProduct;
            }
            set
            {
                _selectedProduct = value;
                RaisePropertyChanged("");
            }
        }
        #endregion
posted @ 2016-05-15 08:06  kongshu  阅读(130)  评论(0编辑  收藏  举报