У меня проблема с использованием Listbox в моем родительском проекте для отображения свойства, определенного в пользовательском элементе управления.Чтобы быть более конкретным, я создал пользовательский элемент управления, который содержит webbrowsercontrol, и я определил свойство с именем History, которое содержит историю URL-адресов, посещенных во время сеанса просмотра.У меня также есть родительский проект, связанный с этим пользовательским элементом управления, в котором я пытаюсь связать свойство History со списком.Смысл в том, чтобы кто-то мог видеть URL-адреса истории в Listbox, определенном в этом родительском проекте, где URL-адреса истории заполняются путем привязки к свойству History пользовательского элемента управления.
Ниже приведен мой код с изложением того, что яя пытаюсь сделать:
Пользовательский контроль FullWebBrowser.xaml.cs
public partial class FullWebBrowser : UserControl
{
//ctr
public FullWebBrowser()
{
InitializeComponent();
//for FullWebBrowser.xaml ContentGrid
ContentGrid.DataContext = this;
}
#region Fields
//The navigation urls of the browser.
private readonly Stack<Uri> _NavigatingUrls = new Stack<Uri>();
//The history for the browser
private readonly ObservableCollection<string> _History = new ObservableCollection<string>();
/// <summary>
/// Gets the History property for the browser.
/// </summary>
public ObservableCollection<string> History
{
get { return _History; }
}
Стек _NavigatingUrls предназначен для реализации кнопки вперед и назад, которая работает нормально, а коллекция _History observablecollection содержитURL-адреса из сеанса просмотра веб-страниц, показанные ниже
//If the navigated uri is not in thehistory, add it
if (!_History.Contains(e.Uri.ToString()))
_History.Add(e.Uri.ToString());
Они, кажется, работают правильно, так как я реализовал кнопки вперед и назад, и они работают нормально.Проблема в том, что я не могу правильно связать свойство History, определенное в FullWebBrowser.xaml.cs, с моим родительским проектом, который содержит Listbox.Это показано следующим образом:
HistoryPage.xaml
xmlns:my="clr-namespace:FullBrowserControl;assembly=FullBrowserControl">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<!--Pivot Control-->
<controls:Pivot Title="QUEST">
<!--Pivot item one-->
<controls:PivotItem Header="today">
<Grid/>
</controls:PivotItem>
<!--Pivot item two-->
<controls:PivotItem Header="week">
<Grid/>
</controls:PivotItem>
<!--Pivot item three-->
<controls:PivotItem Header="all">
<StackPanel>
<ScrollViewer>
<ListBox x:Name="ListBox" ItemsSource="{Binding}"
SelectionChanged="ListBox_SelectionChanged">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=History}" Height="Auto"/>
<TextBlock Foreground="{StaticResource PhoneSubtleBrush}"
Text="{Binding Modified, Converter={StaticResource DateConverter}}"
Margin="24,0,0,12"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Scrollviewer>
</StackPanel>
<!--<Grid/>-->
</controls:PivotItem>
</controls:Pivot>
</Grid>
Обратите внимание, что преобразователь даты в порядке.Здесь я пытаюсь реализовать Listbox, который показывает URL с отметкой времени под ним.Код этой родительской страницы проекта выглядит следующим образом:
Historypage.xaml.cs
public partial class HistoryPage : PhoneApplicationPage
{
//Temporary State
public static readonly Setting<int> CurrentHistoryIndex = new Setting<int>("CurrentHistoryIndex", -1);
private FullWebBrowser browser = new FullWebBrowser();
public HistoryPage()
{
InitializeComponent();
//create new instance of FullWebBrowser user control?
this.browser = new FullWebBrowser();
this.DataContext = browser;
//browser.DataContext = this;
//this.DataContext = browser.History;
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
//Clear the selection so selecting the same item twice in a row will still raise the SelectedChanged event
CurrentHistoryIndex.Value = -1;
this.ListBox.SelectedIndex = -1;
}
void ListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
if (ListBox.SelectedIndex >= 0)
{
//navigate to the page containing the user control for the selected item
//how to navigate to Mainpage.xaml and load webbrowsercontrol with selected url??
CurrentHistoryIndex.Value = ListBox.SelectedIndex;
this.NavigationService.Navigate(new Uri("/MainPage.xaml", UriKind.Relative));
}
}
}
Так что это моя основная реализация.Независимо от того, что я пытаюсь сделать, я не могу получить привязку Listbox на странице History к свойству History в пользовательском элементе управления FullWebBrowser, содержащемся вне проекта, я ссылался на элемент управления FullWebBrowser с помощью параметра ссылки в обозревателе решений в объявлении использования вtop of Historypage.xaml.cs и оператором xmlns вверху HistoryPage.xaml
Любая помощь в достижении этой цели будет принята с благодарностью!Я работаю над этим пару недель и нигде не могу найти решение, даже бродя по постам других.Я должен реализовать это решение как можно скорее!заранее спасибо за вашу помощь.Пожалуйста, включите код для этого, это очень помогло бы увидеть, как это реализовано для дальнейшего использования!