我寫一個WPF應用中,我需要顯示自定義文件見識它由字段名&它的價值。我生成了標籤爲&的網格朗姆酒。我在文本框中的標籤&字段值中顯示字段名稱(我希望它是可編輯的)。 &每次文件選擇的變化,場變化&所以網格列&行數。現在我在後面的代碼中生成這個網格。有沒有什麼辦法可以在XAml中使用視圖模型來完成它。生成動態網格在MVVM模式
0
A
回答
1
我不知道爲什麼你創建這個電網在運行時。您應該考慮使用標準的演示方法,如帶有自定義項目模板的<ListBox>
。總是期望使用UI的聲明定義(在XAML中)而不是代碼隱藏。
我有一個blog post創建一個選中的列表框,顯示一些細節,但你應該能夠找到其他好的例子。
1
這是很容易與ItemsControl
做。如果視圖模型公開元數據對象的名單,說一類是這樣的:
public class FileMetaData : INotifyPropertyChanged
{
private string name;
private string value;
public event PropertyChangedEventHandler PropertyChanged = (o, e) => { };
public string Name
{
get { return name; }
set
{
name = value;
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}
public string Value
{
get { return value; }
set
{
this.value = value;
PropertyChanged(this, new PropertyChangedEventArgs("Value"));
}
}
}
然後,你的視圖模型將其公開爲ObservableCollection
(所以當新的項目被添加或刪除WPF知道):
public class MyViewModel
{
...
public ObservableCollection<FileMetaData> Files { get; private set; }
...
}
然後,你的觀點將使用ItemsControl
與ItemTemplate
進行顯示:
<ItemsControl ItemsSource="{Binding Files}" Grid.IsSharedSizeScope="True">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" SharedSizeGroup="one" />
<ColumnDefinition Width="Auto" SharedSizeGroup="two" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Name}" />
<TextBox Grid.Column="1" Text="{Binding Value}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
注意,我設置Grid.IsSharedSizeScope
在ItemsControl
上爲true,所以列將對齊。如果您有大量數據,則可能需要將其包裝在ScrollViewer
(或者更好地重新設定ItemsControl
)。
相關問題
- 1. 使用mvvm在wpf數據網格中生成列的動態方式
- 2. 通過MVVM動態生成網格中的元素UWP
- 3. 在C#中動態生成HTML格式
- 4. 網格視圖動態生成的列
- 5. 編輯動態生成Telerikmvc3網格
- 6. AngularJS:如何生成動態NG-模式
- 7. 從模板生成網格
- 8. 在MVC中回發動態可編輯表格/網格生成
- 9. 動態生成表格/從模型生成的動態表單/表單
- 10. JSP動態網頁生成
- 11. Android動態生成表格
- 12. 動態HTML表格生成
- 13. 在GWT中動態生成網頁
- 14. 生成動態網格,並填充選定單元格
- 15. 使用MobileAngularUI動態生成模態
- 16. 動態生成模態與骨幹?
- 17. Mvvm在窗口中拖動網格
- 18. Django模型:動態生成模型場
- 19. 生成2D網格在Haskell
- 20. 在Unity中生成網格
- 21. 動態更改Telerik的網格格式
- 22. Python網格生成
- 23. 動態生成Telerik MVC3網格 - 添加複選框
- 24. 如何爲動態三維網格生成三角形數據
- 25. 插入數據並生成網格動態地笨
- 26. 動態生成網站地圖
- 27. 動態紙質表格的生成
- 28. Twig和Silex,生成動態表格
- 29. jQuery中的動態表格生成
- 30. 使用XQuery生成動態表格行
謝謝你的回答。這看起來不錯,但另一個要求是,它不會被顯示爲一列,而是取決於字段,我們將決定運行時多少列網格將基本上水平分佈。所以smtime列cms爲5或4,無論如何。那麼是否可以將columndefination運行時添加到數據模板? (請原諒如果u發現這個很基本的,我是新來WPF) – Rik 2010-09-17 22:11:56
這將生成一個數字,有標籤/文本框輸入(因爲用於一個ItemsControl默認面板是垂直的StackPanel)的行。如果你想切換這個,這樣每個項目都是水平排列的,你需要將ItemsControl.ItemsPanel設置爲水平方向的StackPanel。 WPF博士在他的博客上有一個很棒的系列解釋ItemsControl。這是第一篇文章的鏈接:http://drwpf.com/blog/2007/10/15/itemscontrol-a-is-for-abundance/ – 2010-09-20 13:57:47
GR8,我會嘗試。謝謝您的幫助 !!!我相信appriciate它。 – Rik 2010-09-20 14:50:12