【发布时间】:2017-09-13 19:28:20
【问题描述】:
我有两个元素,一个 WebBrowser 和一个 Slider,我试图根据用户打开的文档类型、PDF 或视频文件 (mp4) 隐藏一个并显示另一个。但是,目前,当我打开 PDF 文件时,WebBrowser 仍然隐藏。
在 MainWindow.xaml 中,我有
<WebBrowser x:Name="PDFView" Width="600"
Height="410" Visibility="{Binding PDFVisible}">
</WebBrowser>
<FFmpegFramework:MediaElement Grid.Row="0" x:Name="MediaElement"
Height="400" Background="Gray" Visibility="{Binding VideoVisible}"/>
在 MainWindow.xaml.cs 中,我有
else if (fileName.Contains("pdf"))
{
MainWindowViewModel dataContext = this.DataContext as MainWindowViewModel;
dataContext.PDFVisible = Visibility.Visible;
dataContext.VideoVisible = Visibility.Collapsed;
//PDFView.Navigate("file:///" + fileName);
}
else if (fileName.Contains("mp4"))
{
MainWindowViewModel dataContext = this.DataContext as MainWindowViewModel;
dataContext.PDFVisible = Visibility.Collapsed;
dataContext.VideoVisible = Visibility.Visible;
}
在 MainWindowModel.cs 中,我有:
public Visibility PDFVisible
{
get
{
return fPDFVisible;
}
set
{
this.SetProperty<Visibility>(ref fPDFVisible, value);
}
}
public Visibility VideoVisible
{
get
{
return fVideoVisible;
}
set
{
this.SetProperty<Visibility>(ref fVideoVisible, value);
}
}
private Visibility fPDFVisible = Visibility.Collapsed;
private Visibility fVideoVisible = Visibility.Visible;
【问题讨论】:
-
主视图模型是否实现了INotifyPropertyChanged?
-
它实现了 BindableBase,我刚刚查了一下,它实现了 INotifyPropertyChanged
-
顺便说一句,您为什么要在 xaml.cs 中而不是在视图模型中进行更改?
-
你能详细说明一下吗? xaml.cs(后面的代码,选择文件类型)正在更改视图模型,我认为这反过来应该更改 XAML 中的绑定属性。我在这里错过了什么吗?你会怎么做?
-
你确定你的“else if”代码块真的被执行了吗?还要确保 PDFView 控件的 DataContext 与 MainWindowViewModel 的实例相同。
标签: c# wpf xaml visibility