I cannot get my bindings to work in the Detail ListView. I have inserted all my MVVM templates below. Please, help!!!
My view: DirectoryDetailView.cs
<UserControl x:Class="S2.Views.DirectoryDetailView" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <Grid> <Grid.ColumnDefinitions> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <ListView Grid.Column="0" ItemsSource="{Binding Path = DirectoryDetails}" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding SelectedDirName, Mode=TwoWay}"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding Path = FileName}" Header="File Name"/> </GridView> </ListView.View> </ListView> <ListView Grid.Column="1" Margin="10,0,0,0" ItemsSource="{Binding Path = DirectoryDetails}"> <ListView.View> <GridView> <GridViewColumn DisplayMemberBinding="{Binding Path = FileDetails.Length}" Header="Length"/> <GridViewColumn DisplayMemberBinding="{Binding Path = FileDetails.LastAccessTime}" Header="LastAccessTime"/> </GridView> </ListView.View> </ListView> </Grid>
My model:
public class DirectoryModel : INotifyPropertyChanged { private string _fileName; private DateTime _createdTime; public string FileName { get { return _fileName; } set { _fileName = value; RaisePropertyChanged("FileName"); } } private IEnumerable<FileDetails> _fileDetails; public IEnumerable<FileDetails> FileDetails { get { return _fileDetails; } set { _fileDetails = value; RaisePropertyChanged("FileDetails"); } } #region INotifyPropertyChanged Members public event PropertyChangedEventHandler PropertyChanged; #endregion protected void RaisePropertyChanged(string propertyName) { PropertyChangedEventHandler propertyChanged = PropertyChanged; if (propertyChanged != null) { propertyChanged(this, new PropertyChangedEventArgs(propertyName)); } } } public class FileDetails { public long Length { get; set; } public DateTime LastAccessTime { get; set; } }
My ViewModel:
public class DirectoryViewModel : BaseViewModel { private IEnumerable<DirectoryModel> _directoryDetails; public IEnumerable<DirectoryModel> DirectoryDetails { get { var service = GetService<IDirectoryService>(); _directoryDetails = service.GetDirectoryDetails(); return _directoryDetails; } set { if(_directoryDetails != value) { _directoryDetails = value; base.RaisePropertyChanged("DirectoryDetails"); } } } private DirectoryModel _selectedDirName; public DirectoryModel SelectedDirName { get { return _selectedDirName; } set { _selectedDirName = value; base.RaisePropertyChanged("SelectedDirName"); } } }
Please let me know what I am doing wrong?
Thanks, AG
c # data-binding wpf mvvm
netmatrix01
source share