2017-03-24 40 views
0

我遇到了與我的項目有關的一些問題。我有一個moderntab,通過請求將鏈接填入數據庫。我的請求的結果返回一個字符串列表,它將成爲我的moderntab鏈接的顯示名稱。我在後面的代碼中創建了所有的鏈接,我希望當我點擊鏈接時,usercontrol的內容會根據displayname的功能發生變化。從mui Link(WPF)更改用戶控件的內容

目前,我知道如何檢測顯示名稱,當它檢測到我改變源。但是我希望所有鏈接都具有相同的Source,並且所選鏈接的displayname功能中的usercontrol內容發生更改。

這就是moderntab我的XAML代碼:

<Grid Style="{StaticResource ContentRoot}"> 
    <mui:ModernTab Layout="List" Name="listEcole" SelectedSourceChanged="listEcole_SelectedSourceChanged"/> 
</Grid> 

這是後面的代碼:

public ListEcoles() 
{ 
    InitializeComponent(); 
    List<string> listEcoles = MainWindow._RE.ListEcoles(); 
    foreach (string nomEcole in listEcoles) 
     listEcole.Links.Add(new Link() { DisplayName = nomEcole, Source = new Uri("/Controles/EcoleControl.xaml", UriKind.Relative) }); 
} 

private void listEcole_SelectedSourceChanged(object sender, SourceEventArgs e) 
{ 
    var selectedLink = listEcole.Links.FirstOrDefault(x => x.Source == listEcole.SelectedSource); 
    if (selectedLink != null) 
    { 
     string selectedDisplayName = selectedLink.DisplayName; 
     MessageBox.Show(selectedDisplayName); 
    } 
} 

,因爲我的鏈接的每一個來源是相同的它不會在這裏工作,所以事件從不進行。

有人可以幫助我。

回答

0

然後處理另一個事件,如。您可以使用一種幫助器方法,在可視樹中查找ListBoxItem,然後使用ListBoxItemDataContext屬性獲取對應的Link對象的引用。

試試這個:

public ListEcoles() 
{ 
    InitializeComponent(); 
    List<string> listEcoles = MainWindow._RE.ListEcoles(); 
    foreach (string nomEcole in listEcoles) 
     listEcole.Links.Add(new Link() { DisplayName = nomEcole, Source = new Uri("/Controles/EcoleControl.xaml", UriKind.Relative) }); 
    listEcole.PreviewMouseLeftButtonUp += ListEcole_MouseLeftButtonUp; 
} 

private void ListEcole_MouseLeftButtonUp(object sender, MouseButtonEventArgs e) 
{ 
    ListBoxItem lbi = e.OriginalSource as ListBoxItem; 
    if (lbi == null) 
    { 
     lbi = FindParent<ListBoxItem>(e.OriginalSource as DependencyObject); 
    } 

    if (lbi != null) 
    { 
     Link selectedLink = lbi.DataContext as Link; 
     if (selectedLink != null) 
     { 
      string selectedDisplayName = selectedLink.DisplayName; 
      MessageBox.Show(selectedDisplayName); 
     } 
    } 
} 

private static T FindParent<T>(DependencyObject dependencyObject) where T : DependencyObject 
{ 
    var parent = VisualTreeHelper.GetParent(dependencyObject); 

    if (parent == null) return null; 

    var parentT = parent as T; 
    return parentT ?? FindParent<T>(parent); 
} 
+0

謝謝你很多的幫助,這正是我想做的事! –