2010-04-20 52 views
1

我在佈局根中的WPF中有一個列表框。如何綁定到數據上下文之外的東西

我也有一個框架在佈局根目錄中。

列表框由具有字符串(Name)和框架元素(UI)的項組成。

如何將框架的內容綁定爲列表框所選項目屬性的UI屬性?

如果你需要一個代碼隱藏,你將如何在MVVM

回答

0

我用來代替構圖ContentControl中,因爲我有問題,結合內容性質,我從來沒有將它綁定更改後刷新。我沒有做適當的MVVM,數據不應該託管在視圖內。

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> 

背後代碼:

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

做到這一點聽起來要顯示對象和詳細信息,選擇對象的列表。如果我是正確的,在MVVM溶液可以如下:

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

<ContentControl Content="{Binding ObjectsList}"> 
    <ContentControl.ContentTemplate> 
     <DataTemplate> 
      <!-- details template --> 
     </DataTemplate> 
    </ContentControl.ContentTemplate> 
</ContentControl> 
相關問題