Master Detail MVVM WPF无法正常工作
我无法让我的绑定工作在Detail ListView上。 我已粘贴下面的所有MVVM模式代码。 请帮忙!!!
我的观点:DirectoryDetailView.cs
我的型号:
public class DirectoryModel : INotifyPropertyChanged { private string _fileName; private DateTime _createdTime; public string FileName { get { return _fileName; } set { _fileName = value; RaisePropertyChanged("FileName"); } } private IEnumerable _fileDetails; public IEnumerable 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; } }
我的ViewModel:
public class DirectoryViewModel : BaseViewModel { private IEnumerable _directoryDetails; public IEnumerable DirectoryDetails { get { var service = GetService(); _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"); } } }
请让我知道,我做错了什么?
谢谢,AG
很难说没有看到XAML,但我的第一个想法是1)你没有将DataContext属性设置为ViewModel或2)你在Binding本身有一些语法问题。
您应该使用ObservableCollection而不是IEnumerable
我还要指出,您不需要在模型上实现INotifyPropertyChanged:ViewModel需要此接口来支持DataBinding,但将它添加到Model类没有实际价值。
我不记得我从哪里得到这种技术,但它在用于调试绑定时非常有用
在项目中添加一个名为Debugconverter的类
public class DebugConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value; //set the breakpoint here } public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { return value; }
}
然后我在app.xaml中添加对它的引用
然后在绑定中使用它,
Binding="{Binding Path=PropertyName, Converter={StaticResource debugConverter}}"
当绑定发生时,你会得到一个断点,如果没有它,我会被搞砸。 还要检查输出窗口,那里有绑定失败的列表。
会有所帮助,知道问题是什么……从来没有,我要问的问题是: –
是你的吸气者被击中(在它们中放一个断点)?
是第一个列表视图工作,第二个不是吗?
如果它只是第二个失败我会猜测问题是你试图将两列绑定到属性IEnumerable FileDetails,然后你试图遵循IEnumerable上的属性路径,这将无法工作,如它是一组对象,而不是一个。 您是否已从上面的列表视图中复制并粘贴了代码,而未正确设置项目来源?
你跑步时输出窗口是什么? 它通常告诉您无法找到绑定路径。 如果你按照上面的调试转换器建议,你可以找出你绑定的内容(如果有的话)