【发布时间】:2016-01-11 01:30:33
【问题描述】:
我的问题是我在 Viewmodel 中添加了 2 个类型文件对象(出于测试原因),这是一个可观察的集合,但视图不会随着应用程序的启动而更新。 这是 Mainview.cs:
public class MainView:ObservableCollection<Files>
{
public MainView()
{
Files x = new Files("picture", "jpg");
Files x1 = new Files("soundfile", "mp3");
Add(x);
Add(x1);
}}
我做错了什么?以及如何避免这个错误?如果我不更改 Files 类中的属性并且只想在创建新的 File 对象时更新视图,是否真的需要 INotifyPropertyChanged?
我上了这门课:
public class Files:INotifyPropertyChanged
{
private String _fileName;
public String FileName
{
get { return _fileName; }
set { _fileName = value; OnPropertyChanged("FileName"); }
}
private String _dataType;
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public String DataType
{
get { return _dataType; }
set { _dataType = value; OnPropertyChanged("DataType"); }
}
public Files(string filename, string dataType)
{
this._fileName = filename;
this._dataType = dataType;
}
}
还有这个 ViewModel:
public class MainView:ObservableCollection<Files>
{
public MainView()
{
Files x = new Files("picture", "jpg");
Files x1 = new Files("soundfile", "mp3");
Add(x);
Add(x1);
}
}
并在 xaml 中做到这一点:
<Window x:Class="ClientTestDesign.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:ClientTestDesign"
xmlns:vm="clr-namespace:ClientTestDesign.ViewModel"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
>
<Window.Resources>
<vm:MainView x:Key="View"></vm:MainView>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="75"></RowDefinition>
<RowDefinition Height="*"></RowDefinition>
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
<ColumnDefinition></ColumnDefinition>
</Grid.ColumnDefinitions>
<Button Grid.Column="0" Style="{DynamicResource ForwardBackButton}" Content="Back"></Button>
<Button Grid.Column="1" Style="{DynamicResource StopButton}" Content="Pause"></Button>
<Button Grid.Column="2" Style="{DynamicResource ForwardBackButton}" Content="Forward"></Button>
<ListView Grid.Row="1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Grid.ColumnSpan="3">
<ListView.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding /FileName, Source={StaticResource View}}"></TextBlock>
<TextBlock Text="{Binding /FileName, Source={StaticResource View}}"></TextBlock>
</StackPanel>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
</Grid>
【问题讨论】:
-
这更多的是一个理解问题。您的
Files类应该是您的 ViewModel。Files应该是您的 ViewModel 中的一个属性。 -
@KosalaW 你的意思是文件应该是可观察的集合?我的 fviewmodel 应该包含文件的属性?
-
@KosalaW 这不可能是唯一的错误,不是吗?我改了没用
-
我会尽快写一个答案。这样你就能更好地理解它。
-
@KosalaW 好的,我很期待
标签: c# xaml mvvm view observable