Проблема с Binding у UserControl`а

132
30 июня 2019, 19:10

MainWindow.xaml

<local:VideoPlayerControl SourceVideo="{Binding Test}"/>
<Button Command="{Binding command}" Width="100" Height="100"></Button>

MainViewModel.cs (: INotifyPropertyChanged)

private Uri _Test = new Uri(@"D:\Videos\1.mp4", UriKind.RelativeOrAbsolute);
    public Uri Test
    {
        get { return _Test; }
        set { _Test = value; OnPropertyChanged(); }
    }
    public ICommand command { get; }
    public MainViewModel()
    {
        command = new RelayCommand(o => { Test = new Uri(@"D:\Videos\3.mp4", UriKind.RelativeOrAbsolute); });
    }
    public event PropertyChangedEventHandler PropertyChanged;
    public void OnPropertyChanged([CallerMemberName]string prop = "") => PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(prop));

VideoPlayerControl.xaml

<UserControl.DataContext>
    <local:VideoPlayerVM/>
</UserControl.DataContext>
    <MediaElement Source="{Binding ElementName=UserControlmain, Path=SourceVideo}" LoadedBehavior="Pause" UnloadedBehavior="Manual"/>

VideoPlayerControl.xaml.cs

public static readonly DependencyProperty SourceVideoProperty = DependencyProperty.Register("SourceVideo", typeof(Uri), typeof(VideoPlayerControl), new PropertyMetadata(new Uri(@"D:\Videos\1.mp4", UriKind.RelativeOrAbsolute), OnSourceVideoChanged));
    public Uri SourceVideo
    {
        get { return (Uri)GetValue(SourceVideoProperty); }
        set { SetValue(SourceVideoProperty, value); MessageBox.Show(SourceVideo.ToString()); }
    }
    private static void OnSourceVideoChanged(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        obj.SetValue(SourceVideoProperty, e.NewValue);
    }

А VideoPlayerVM пустой

Проблема в том что при клике на кнопку по задумке Test меняется но путь к новому видео В MainWindow.xaml VideoPlayerControl устанавливается новый путь дальше через Binding к MediaElement устанавливается новый путь.

Вместо задуманного ничего не происходит и в выводе выводиться ошибка System.Windows.Data Error: 40 : BindingExpression path error: 'Test' property not found on 'object' ''VideoPlayerVM' (HashCode=33624151)'. BindingExpression:Path=Test; DataItem='VideoPlayerVM' (HashCode=33624151); target element is 'VideoPlayerControl' (Name='UserControlmain'); target property is 'SourceVideo' (type 'Uri')

Как исправить эту проблему? Или подскажите пожалуйста способ легче и грамотней.

READ ALSO
Зачем нужен continue? (Наглядный пример)

Зачем нужен continue? (Наглядный пример)

У меня такая ситуация,что нужно объяснить концепцию операторов break/continue(зачем они нужны и как работают),с первым все понятно,а со вторым возникают...

138
Бинарные деревья. Удаление узла с двумя потомками

Бинарные деревья. Удаление узла с двумя потомками

Мне необходимо удалить узел дерева, если у него имеются двое детейНаходил примеры удаления на других языках, но без понятия, как это реализовать...

119
Добавление записи в таблицу и на страницу с помощью ajax

Добавление записи в таблицу и на страницу с помощью ajax

Изучаю javascriptДобрался до ajax запросов

144
Как парсить сайты с авторизацией?

Как парсить сайты с авторизацией?

Парсер с использованием Anglesharp

144