2010-04-20 7 views
1

J'ai une liste déroulante dans WPF qui se trouve dans la racine de mise en page. J'ai également un cadre qui est dans la racine de mise en page aussi bien.Comment se lier à quelque chose en dehors d'un datacontext

La zone de liste est composée d'éléments qui ont une chaîne (Name) et un élément de cadre (UI). Comment puis-je lier le contenu du cadre à la propriété UI de la propriété d'élément sélectionné de la liste?

Si vous avez besoin d'un codebehind, comment voulez-vous faire dans MVVM

Répondre

0

J'ai utilisé un ContentControl au lieu de cadre depuis que j'avais problème de liaison à la propriété de contenu, je ne l'ai eu pour rafraîchir après la liaison changé. Je n'ai pas fait MVVM correct, les données ne devraient pas être hébergées dans la vue.

XAML:

<Window.Resources> 
    <CollectionViewSource x:Key="CVS" Source="{Binding}" /> 
</Window.Resources> 

<StackPanel DataContext="{Binding Source={StaticResource CVS}}"> 
    <ListBox 
     ItemsSource="{Binding}" 
     IsSynchronizedWithCurrentItem="True" 
     DisplayMemberPath="Name"> 
    </ListBox> 
    <ContentControl Content="{Binding Path=UI}" /> 
</StackPanel> 

code derrière:

using System.Collections.Generic; 
using System.Windows; 
using System.Windows.Controls; 

namespace BindDemo 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      Data = new List<DataItem>(); 
      Data.Add(new DataItem("TextBox", new TextBox(){ Text="hello" })); 
      Data.Add(new DataItem("ComboBox", new ComboBox())); 
      Data.Add(new DataItem("Slider", new Slider())); 

      DataContext = Data; 
     } 

     public List<DataItem> Data 
     { 
      get; private set; 
     } 
    } 

    public class DataItem 
    { 
     public DataItem(string name, FrameworkElement ui) 
     { 
      Name = name; 
      UI = ui; 
     } 

     public string Name { get; private set; } 
     public FrameworkElement UI { get; private set; } 
    } 
} 
0

Il semble que vous souhaitez afficher la liste des objets et des détails pour l'objet sélectionné. Si je ne me trompe pas, solution MVVM peut être la suivante:

<ListView ItemsSource="{Binding ObjectsList}" IsSynchronizedWithCurrentItem="True" /> 

<ContentControl Content="{Binding ObjectsList}"> 
    <ContentControl.ContentTemplate> 
     <DataTemplate> 
      <!-- details template --> 
     </DataTemplate> 
    </ContentControl.ContentTemplate> 
</ContentControl> 
Questions connexes