我有一個TabControl,它顯示我的ViewModels的集合。 ViewModel和View之間的映射由DataTemplate實現。我使用MVVM,但沒有PRISM(出於歷史原因)。 ViewModel的基類有一個加載信息的方法Load
。我想要做的只是在選擇與當前ViewModel對應的TabItem(延遲加載)時調用此方法。有任何想法嗎? PS我找到了類似問題的答案 - Lazy loading WPF tab content但我無法理解如何在MVVM中使用方法2。TabControls(MVVM)中的延遲加載
2
A
回答
12
TabItem作爲任何選擇器項目具有IsSelected屬性。您可以嘗試使用雙向綁定將其與視圖模型綁定。當模型的IsSelected第一次設置爲true時,您可能會加載您的數據。
XAML:
<TabControl ...>
<TabControl.ItemContainerStyle>
<Style TargetType="{x:Type TabItem}">
<Setter Property="IsSelected"
Value="{Binding Path=IsSelected,Mode=TwoWay}"/>
</Style>
</TabControl.ItemContainerStyle>
</TabControl>
樣品型號:
public class MyViewModel : INotifyPropertyChanged
{
private bool _isLoaded;
private void Load()
{
// code
}
private bool _isSelected;
public bool IsSelected
{
get
{
return this._isSelected;
}
set
{
if (this._isSelected != value)
{
this._isSelected = value;
if (this._isSelected && !this._isLoaded)
{
this.Load();
this._isLoaded = true;
}
var propertyChanged = this.PropertyChanged;
if (propertyChanged != null)
{
propertyChanged(this, new PropertyChangedEventArgs("IsSelected"));
}
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
5
的另一種方式。這基本上模擬了MVVM中的一個SelectedTabChanged
事件。
它通過標籤的Name
屬性綁定到一個SelectedTabName
屬性在視圖模型到你可以做你想要的(包括通過設定值返回到其以前的值防止標籤的變化)什麼的。
視圖模型
public string _selectedTabName;
public string SelectedTabName
{
get { return _selectedTabName; }
set
{
if (_selectedTabName != value)
{
_selectedTabName = value;
RaisePropertyChanged("SelectedTabName");
if (SelectedTabName == "EVENTS" && EventsLoaded == false)
{
LoadEvents();
}
if (SelectedTabName == "MESSAGES" && MessagesLoaded == false)
{
LoadMessages();
}
}
}
}
XAML
<TabControl SelectedValuePath="Name" SelectedValue="{Binding SelectedTabName}">
<TabItem Header="Events" Name="EVENTS">
...
</TabItem>
<TabItem Header="Messages" Name="MESSAGES">
...
</TabItem>
</TabControl>
相關問題
- 1. 延遲加載
- 2. 延遲加載
- 3. 延遲加載
- 4. 的jquery - 延遲加載 - 設置延遲
- 5. 如何在延遲加載的WPF MVVM TreeView中搜索?
- 6. 延遲加載3.2.6
- 7. nhibernate延遲加載
- 8. 延遲加載MirrorType
- 9. RecyclerView延遲加載
- 10. 延遲加載DLL
- 11. Firebase延遲加載
- 12. UIwebview延遲加載
- 13. 延遲加載CollectionViewSource?
- 14. Laravel延遲加載
- 15. Firebase延遲加載
- 16. gwt延遲加載
- 17. 延遲加載XmlDocument
- 18. 延遲加載MEF?
- 19. 在node.js中延遲加載
- 20. 在c#中延遲加載?
- 21. 延遲加載DataTable中
- 22. 隱式延遲加載vs顯式延遲加載
- 23. 加載時的延遲Default.png
- 24. 延遲加載用的DbContext
- 25. iframe的延遲加載?
- 26. 延遲加載的DLL
- 27. Datagrid的autoheight +延遲加載
- 28. 春庫和延遲加載
- 29. NUnit延遲加載TestCaseSource
- 30. SQLAlchemy.declarative和延遲列加載
1.我不明白如何使用IsSelected屬性 - 我只有TabControl的,並且顯示在用戶控件它。所以我沒有明確的TabItems,也不知道如何得到它們。 – 2011-01-21 08:52:43