早些年在WPF中使用COM组件时,需要在ViewModel中操作COM组件中的控件对象,但是这个控件对象又不支持绑定,
后面的解决办法是在窗口加载时,将控件对象以参数传递到Loaded事件的处理命令中,然后将这个对象记录下来,后面就可以直接操作这个控件了。
今天同事在使用WebView2的时候,又遇到这个问题,写个文章分享一下,给后续需要的小伙伴提供点参考。
第一个例子以Windows Media Player控件为例
我们创建一个WPF的项目,然后在界面上放置一个WMP控件(Windows Media Player)。
1 <Window x:Class="GetControlInViewModel.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:wmp="clr-namespace:AxWMPLib;assembly=AxInterop.WMPLib" 7 xmlns:local="clr-namespace:GetControlInViewModel" 8 mc:Ignorable="d" 9 Title="MainWindow" Height="450" Width="800"> 10 <Grid> 11 <WindowsFormsHost> 12 <wmp:AxWindowsMediaPlayer x:Name="WMPPlayer"></wmp:AxWindowsMediaPlayer> 13 </WindowsFormsHost> 14 </Grid> 15 </Window>
如果我们想在ViewModel中操作这个WMP对象,可以在Loaded事件中添加如下处理
这里我使用了废弃的包MvvmLight来做演示,因为比较简单方便。
1 <i:Interaction.Triggers> 2 <i:EventTrigger EventName="Loaded"> 3 <i:InvokeCommandAction Command="{Binding LoadedCommand}" CommandParameter="{Binding ElementName=WMPPlayer}"></i:InvokeCommandAction> 4 </i:EventTrigger> 5 </i:Interaction.Triggers>
ViewModel
第二个例子以WebView2为例
标签:控件,MVVM,为例,对象,ViewModel,操作,WPF From: https://www.cnblogs.com/zhaotianff/p/18222844