덕분에 this question (click me!) 덕분에 WebBrowser
의 Source
속성이 내 ViewModel에 올바르게 바인딩되었습니다.WPF에서 WebBrowser 컨트롤을 사용하는 MVVM 친화적 인 방법이 있습니까?
지금은 두 개 더 목표를 달성하고 싶습니다 :
- 제대로
WebBrowser
의CanGoBack
및CanGoForward
속성에 바인딩 내 뒤로 및 앞으로 버튼의IsEnabled
속성을 가져옵니다. - 과
GoBack()
메서드를 코드 숨김에 의존하지 않고 호출 할 수 있으며 ViewModel은WebBrowser
에 대해 알 필요가 없습니다.
나는 순간에서 다음 (비 작동) XAML 마크 업이 있습니다
<WebBrowser
x:Name="_instructionsWebBrowser"
x:FieldModifier="private"
clwm:WebBrowserUtility.AttachedSource="{Binding InstructionsSource}" />
<Button
Style="{StaticResource Button_Style}"
Grid.Column="2"
IsEnabled="{Binding ElementName=_instructionsWebBrowser, Path=CanGoBack}"
Command="{Binding GoBackCommand}"
Content="< Back" />
<Button
Style="{StaticResource Button_Style}"
Grid.Column="4"
IsEnabled="{Binding ElementName=_instructionsWebBrowser, Path=CanGoForward}"
Command="{Binding GoForwardCommand}"
Content="Forward >" />
나는 문제가 CanGoBack
및 CanGoForward
종속성 속성이없는 (그리고 구현하지 않는다는 것입니다 확신을 INotifyChanged
),하지만 그 문제를 해결하는 방법을 잘 모르겠습니다.
질문 :
(나는
Source
했던 것처럼) 연결된 속성를 연결하거나CanGoBack
및CanGoForward
바인딩을 작동시킬 비슷한 어떤 방법이 있나요?GoBackCommand
및GoForwardCommand
을 코드 숨김 및 ViewModel과 독립적으로 작성하고 마크 업에서 선언 할 수 있습니까?
@Botz, 감사합니다. 나는 당신이 실제로 당신의'FrameworkElement' 클래스를 어떻게 설정했는지 약간 흐리다. 나는 당신이 필드'webBrowser'를 가지고 있다고 가정하지만 실제로 어떻게 표시 할 것인가? 나는'UserControl'을 만들고 사실상'WebBrowser'를 컨트롤에'Grid'에 넣어야한다고 생각했습니다. 'FrameworkElement'를 상속받은 클래스로 어떻게 처리할까요? 감사. – devuxer
실제로 UserControl이 필요하지는 않습니다. FrameworkElement는 올바르게 설정하는 한 괜찮습니다. 구현 방법이 좋지 않을 수도 있지만 원하는 경우 브라우저 (http://pastebin.com/m492dbd3f)에서 찾을 수 있습니다 (BrowserViewModel에 대해 궁금한 점은 컨트롤의 속성이 실제로 바인딩 된 ViewModel입니다.) , 당신은 이미 자신의 ViewModel을 가지고 있다고 확신합니다.) – Botz3000
// btw FrameworkElement에서 파생 된 경우 AddVisualChild 및 AddLogicalChild를 호출하여 실제로 WebBrowser 또는 그 안의 다른 내용을 넣을 수 있습니다. – Botz3000