我有類型的FrameworkElement的一個ObservableCollection,我想在一個StackPanel或類似的東西,以顯示用戶控件的一個ObservableCollection。 observablecollection中的每個項目都是我創建的用戶控件。我對WPF很新,我不知道如何做到這一點。一個例子,將不勝感激編程填充一個StackPanel使用MVVM
2
A
回答
4
我借用rhe1980的回答有點這裏,但關鍵是是t他在代碼隱藏中的代碼實際上將處於視圖模型中。
查看:
<Window x:Class="Sandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Name="mainWindow">
<Grid>
<StackPanel>
<ItemsControl ItemsSource="{Binding Path=MyCollection}"/>
</StackPanel>
</Grid>
代碼隱藏:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new MyViewModel();
}
}
視圖模型:
public class MyViewModel: INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string propertyName)
{
if (!string.IsNullOrEmpty(propertyName))
{
if (this.PropertyChanged != null)
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
this.OnObjectChanged();
}
private ObservableCollection<FrameworkElement> _myCollection;
public ObservableCollection<FrameworkElement> MyCollection
{
get
{
return _myCollection;
}
set
{
_myCollection = value;
OnPropertyChanged("MyCollection");
}
}
}
+0
如果您正在使用某種形式的依賴注入,虛擬機實際上可以被傳遞到視圖的構造函數,但是這是一個快速解決方案,如果需要,我可以補充。 – NickHeidke
2
使用的ItemsControl用於綁定在StackPanel中所述的ObservableCollection:
視圖(XAML):
<Window x:Class="Sandbox.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
Name="mainWindow">
<Grid>
<StackPanel>
<ItemsControl ItemsSource="{Binding ElementName=mainWindow,Path=ObservableCollection}"/>
</StackPanel>
</Grid>
代碼隱藏(xaml.cs):
public partial class MainWindow : Window
{
public ObservableCollection<FrameworkElement> ObservableCollection { get; set; }
public MainWindow()
{
InitializeObservableCollection();
InitializeComponent();
}
private void InitializeObservableCollection()
{
ObservableCollection = new ObservableCollection<FrameworkElement>();
for (var ii = 0; ii < 10; ii++)
{
ObservableCollection.Add(new Button {Content = ii.ToString()});
}
}
}
相關問題
- 1. 在DockPanel中填充StackPanel
- 2. 如何使用與MVVM模型WPF數據綁定來填充自定義一個StackPanel控件
- 3. 使用mvvm填充列表視圖
- 4. 使用綁定MVVM填充文本框
- 5. StackPanel有一個DataContext,如何用另一個選項值填充ListPicker?
- 6. WPF綁定mvvm StackPanel
- 7. 使用MVVM範例填充與c#的組合框使用MVVM範例填充組合框
- 8. 如何擴大滑塊來填充可用空間,當滑塊是一個StackPanel
- 9. 更改填充編程
- 10. WPF,MVVM使用另一個組合框選定項目填充組合框
- 11. 使用線程填充JList
- 12. 在MVVM中動態地填充一個存儲段
- 13. 填充一個DTO類使用LINQ
- 14. 使用Ajax時一個輸入填充
- 15. 填充一個Django使用左連接
- 16. 無法使用TinyMCE編輯器填充Ajax填充的textarea
- 17. 以編程方式獲取最後一個使用C填充excel行#
- 18. 填充一個textboxlist
- 19. 填充一個DropDownList
- 20. 填充一個ListView
- 21. 填充一個JTree
- 22. 填充一個值
- 23. 在一個StackPanel
- 24. 從一個StackPanel
- 25. 用數據庫中的複選框填充StackPanel
- 26. 填充StackPanel中的所有可用空間
- 27. 編程設置從列表填充,當一個表中的列
- 28. Android:以編程方式設置textview的一個填充
- 29. MySql用於隨機填充行的過程只填充一行
- 30. 基本MVVM WPF不填充數據
MVVM通常會不贊成這種技術,因爲你的視圖模型緊密耦合到視圖,導致在下降的可測性,便攜性等,這是哪裏的ObservableCollection框架元素是從哪裏來的? – NickHeidke
在完美的世界中,viewmodel是一組不關心前端如何實現的屬性集合。通過擁有一個可觀察的FrameworkElement集合,您可以將虛擬機耦合到特定的演示實現。這當然是功能性的。讓我知道下面的答案是否能解決您的問題! :-) – NickHeidke
您的解決方案就像一個魅力!謝謝! – user823486