Я вижу похожие вопросы, касающиеся того, что ListView не обновляется в MVVM, однако я уже давно борюсь с этим .. У меня есть 2 класса, один из которых является частью другого, например:
public class Info
{
public string Name { get; set; }
public string Status { get; set; }
....
public ObservableCollection<Content> UserContent { get; set; } = new ObservableCollection<Content>();
}
public class Content
{
public string Filename { get; set; }
public string Path { get; set; }
public string Type { get; set; }
}
Страница разделена на 2 столбца, слева - элементы управления, а справа - один пользовательский. При щелчке по элементу управления он передает текст данных в пользовательский элемент управления
<local:ScreenControl DataContext="{Binding MainPageViewModel.SelectedDevice,
Source={x:Static local:ViewModelLocator.Instance}}" />
UserControl содержит TabControl. Одна из вкладок отображает детали из класса Info
.....
<TextBlock Style="{StaticResource localTextBlock}" Text="{Binding Name}" />
<TextBlock Style="{StaticResource localTextBlock}" Text="{Binding Location}" />
.....
И до здесь все хорошо. Проблема начинается на другой вкладке. У меня есть кнопка, которая откроет OpenFileDialog, перейдет к видеофайлу и добавит файл в UserContent. Затем должен отобразиться список просмотра.
public ICommand AddVidCommand { get; set; }
AddVidCommand = new RelayCommand(AddVid);
public void AddVid()
{
if (MainPageViewModel.SelectedDevice is ScreenInfo info)
{
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "Video Files|*.mp4;*.mkv;*.wmv";
if (openFileDialog.ShowDialog() == true)
{
info.UserContent.Add(new Content
{
Filename = openFileDialog.SafeFileName,
Path = openFileDialog.FileName
});
}
}
}
<TabItem Header="Playlist">
<StackPanel Orientation="Vertical" >
<Button Content="Add"
Command="{Binding ScreenControlViewModel.AddVidCommand,
Source={x:Static local:ViewModelLocator.Instance}}"
CommandParameter="{Binding}"/>
<ListView x:Name="fileList"
ItemsSource="{Binding UserContent}">
<ListView.View>
<GridView>
<GridViewColumn Width="100" DisplayMemberBinding="{Binding Type}" Header="Type" />
<GridViewColumn Width="100" DisplayMemberBinding="{Binding Filename}" Header="Name" />
<GridViewColumn Width="100" DisplayMemberBinding="{Binding Path}" Header="Path" />
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</TabItem>
Добавление MainPageViewModel
public class MainPageViewModel : BaseViewModel
{
public static ObservableCollection<ScreenInfo> Devices { get; set; }
public static ScreenInfo SelectedDevice { get; set; }
public MainPageViewModel()
{
Devices = new ObservableCollection<ScreenInfo>();
}
}
Как вы, наверное, догадались, мой список не обновляется. Я ясно вижу информацию, передаваемую классу в visual studio с помощью команды button, но пользовательский интерфейс не отображается ..