我正在创建一个应用程序,其中您的按钮中有一个列表框,其中包含不同网站的徽标,顶部有WebBrowser
。我们的想法是,当您按下徽标时,webBrowser会加载相应的页面。我已经完成了这项工作,但我想用MVVM重新制作应用程序以使其更好。我已经制作了包含所有徽标的列表框,但是当我点击徽标时,我不知道如何将URL加载到WebBrowser
。
答案 0 :(得分:6)
不是100%确定这是否适用于Phone7但值得一试......
Fist off WebBrowser
Source属性不可绑定,因为它不是DependancyProperty
所以你必须创建一个帮助类来创建AttachedProperty
以帮助绑定。
然后,您可以使用包含ListBoxItem中实际链接的属性将ListBox
SelectedItem
链接到新的LinkSource
属性。
示例:
的Xaml:
<Window x:Class="WpfApplication8.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfApplication8"
Title="MainWindow" Height="233" Width="405" Name="UI">
<StackPanel Orientation="Horizontal" DataContext="{Binding ElementName=UI}">
<ListBox x:Name="listbox" ItemsSource="{Binding Links}" Width="100" DisplayMemberPath="Name"/>
<WebBrowser local:WebBrowserHelper.LinkSource="{Binding ElementName=listbox, Path=SelectedItem.Site}" Width="200"/>
</StackPanel>
</Window>
代码:
public partial class MainWindow : Window
{
private ObservableCollection<Link> _links = new ObservableCollection<Link>();
public MainWindow()
{
InitializeComponent();
Links.Add(new Link { Name = "StackOverflow", Site = new Uri("http://stackoverflow.com/") });
Links.Add(new Link { Name = "Google", Site = new Uri("http://www.google.com/") });
}
public ObservableCollection<Link> Links
{
get { return _links; }
set { _links = value; }
}
}
// ListBox item
public class Link
{
public string Name { get; set; }
public Uri Site { get; set; }
}
// helper calss to create AttachedProperty
public static class WebBrowserHelper
{
public static readonly DependencyProperty LinkSourceProperty =
DependencyProperty.RegisterAttached("LinkSource", typeof(string), typeof(WebBrowserHelper), new UIPropertyMetadata(null, LinkSourcePropertyChanged));
public static string GetLinkSource(DependencyObject obj)
{
return (string)obj.GetValue(LinkSourceProperty);
}
public static void SetLinkSource(DependencyObject obj, string value)
{
obj.SetValue(LinkSourceProperty, value);
}
// When link changed navigate to site.
public static void LinkSourcePropertyChanged(DependencyObject o, DependencyPropertyChangedEventArgs e)
{
var browser = o as WebBrowser;
if (browser != null)
{
string uri = e.NewValue as string;
browser.Source = uri != null ? new Uri(uri) : null;
}
}
}
结果:
答案 1 :(得分:-1)
你的问题实际上是两个问题。
有多种方法可以从列表框中获取点击次数。最基本的是<Listbox SelectedItem="{Binding selectedItem,mode=TwoWay}" ...
要设置Web浏览器的URL,您可以在VM中实现INotifyPropertyChanged,在WM中声明public Uri browserUri { get; private set; }
,确保在更改属性时引发PropertyChanged,并在XAML中<WebBrowser Source="{Binding browserUri}" />