J'ai un problème avec l'utilisation d'une zone de liste dans mon projet parent pour afficher une propriété définie dans un contrôle utilisateur. Pour être plus précis, j'ai créé un contrôle utilisateur qui contient un webbrowsercontrol, et j'ai défini une propriété appelée Historique qui contient l'historique des URL visitées lors d'une session de navigation. J'ai également un projet parent, qui est lié à ce contrôle utilisateur, dans lequel j'essaye de lier la propriété History à une Listbox. Le but est que quelqu'un puisse voir les urls de l'historique dans une Listbox définie dans ce projet parent, où les URL de l'historique sont remplies en se liant à la propriété History du contrôle utilisateur.Comment lier une propriété usercontrol à Listbox
Ci-dessous mon code Hiérarchique ce que je suis en train de faire:
FullWebBrowser.xaml.cs de contrôle utilisateur
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; }
}
La pile est _NavigatingUrls pour la mise en œuvre du bouton avant et en arrière, ce qui fonctionne très bien et le ObservableCollection _History contient les urls de la session de Navigation web sont représentées comme suit
//If the navigated uri is not in thehistory, add it
if (!_History.Contains(e.Uri.ToString()))
_History.Add(e.Uri.ToString());
Ceux-ci semblent fonctionner correctement, comme je h ave mis en œuvre les boutons avant et arrière et ils fonctionnent bien. Le problème est que je ne peux pas lier correctement la propriété History définie dans FullWebBrowser.xaml.cs à mon projet parent qui contient une zone de liste. Ceci est illustré comme suit
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>
Remarque, le DateConverter est ok. Ici, j'essaie d'implémenter une Listbox qui montre l'URL avec un horodatage en dessous. Le code derrière cette page de projet parent est le suivant
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));
}
}
}
Voici donc ma mise en œuvre de base. Peu importe ce que j'essaie je ne peux pas obtenir la Listbox dans Historypage pour se lier à la propriété History dans le contrôle utilisateur FullWebBrowser contenu en dehors du projet, j'ai référencé le contrôle FullWebBrowser en utilisant l'option références dans l'explorateur de solution, dans une déclaration top of Historypage.xaml.cs, et par une instruction xmlns en haut de HistoryPage.xaml
Toute aide avec comment cela peut être accompli serait grandement appréciée! Je travaille sur ce sujet depuis quelques semaines et je ne trouve pas la solution nulle part, même en rôdant les messages des autres. Je dois mettre en œuvre cette solution dès que possible! merci pour votre aide à l'avance. S'il vous plaît inclure le code pour accomplir cela, il serait tellement utile de voir comment cela est mis en œuvre pour référence future!
Vérifiez la fenêtre de sortie lorsque vous l'exécutez, voyez-vous des erreurs de liaison? –