我一直在試圖建立在WPF繼MVVM開發模式相當簡單的應用程序,但我已經準備在它看來多麼困難是做簡單的事情瘋狂。我已經在Forms中創建了這個應用程序,並且它已經成功運行,但是我的老闆要求我將WPF中的接口重寫爲該技術的演示。爲了使應用程序和代碼儘可能具有教育性,我決定儘量遵循儘可能多的最佳做法。我目前的困境是每次選擇更改時都使用一個列表框來運行一些代碼。我準備好使用帶事件的代碼隱藏來調用視圖模型上的方法。對我來說,這似乎仍然是MVVM,因爲沒有邏輯執行。感謝任何幫助/見解。有沒有簡單的方法將命令綁定到MVVM WPF中的列表框?
回答
你可以做列表框,簡單地結合selectedItem屬性...上選擇在視圖模型改變setter方法被調用,你可以做你想做什麼都...
這裏是一個示例這將幫助你
XAML
<Grid Canvas.Left="0" Canvas.Bottom="0" Height="300" Width="300" Background="Bisque">
<ListBox ItemsSource="{Binding Employes}" SelectedItem="{Binding SelectedEmploye}"/>
</Grid>
視圖模型
public class ViewModel : ViewModelBase
{
private List<Employee> _employes;
public List<Employee> Employes
{
get { return _employes; }
set { _employees = value; OnPropertyChanged("Employes"); }
}
private Employee _selectedEmploye;
public Employee SelectedEmploye
{
get { return _selectedEmploye; }
set
{
_selectedEmployee = value;
OnPropertyChanged("SelectedEmploye");
}
}
}
查看示範基地
public class ViewModelBase : INotifyPropertyChanged
{
protected virtual void OnPropertyChanged(string propertyName)
{
if (this.PropertyChanged != null)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
public event PropertyChangedEventHandler PropertyChanged;
}
Employee類
public class Employee : ViewModelBase
{
private string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
}
在您的視圖模型,你可以創建一個屬性 「的SelectedItem」。然後將SelectedItem屬性綁定到您的ListBox屬性中。
- 如果它是POCO clr屬性(INotifyPropertyChanged),那麼您可以從屬性設置器中觸發您的代碼。
- ,如果它是一個DependencyProperty,你必須添加一個PropertyChangedCallback,並從那裏觸發你的代碼。
不要害怕使用代碼隱藏。沒有代碼隱藏是避免在視圖中放置太多邏輯的指南,而不是一條硬性規則。在這種情況下(正如其他人所建議的那樣),您可以將SelectedItem屬性綁定到viewmodel上的某個屬性。對於與數據無關的事件,我的建議是正常處理事件,並將執行邏輯委託給視圖模型。
在我看來,設計模式應始終被視爲經驗法則,並與一些判斷使用,因爲它是很容易過於嚴格執行他們在不屬於他們,這通常使事情變得更糟的區域。
我傾向於在這裏同意你的觀點,但幸運的是,看起來有一些更簡單的方法可以做到這一點,而不會跳過所有我認爲必須做的事情。 – Paul
@ pauleck1 - 如果你覺得你不必要地跳過籃球,那麼現在是時候退後一步,重新考慮你是否採取了正確的做法。隨着所有MVVM框架的出現,很容易無望地過度設計事物並使代碼更難以維護(這有點失敗了)。不是說我在說MVVM是壞的,它當然是我使用WPF的首選武器。 – Moonshield
可以綁定到ListBox.SelectedItem讓你的虛擬機所選擇的項目。
- 1. ListBoxItem的MVVM命令中的WPF列表框的命令綁定
- 2. 有沒有簡單的方法綁定到WPF中的父行?
- 3. WPF:將ContextMenu綁定到MVVM命令
- 4. 簡單的WPF + MVVM綁定
- 5. WPF命令綁定到MVVM的DataItemTemplate
- 6. MVVM WPF - Viewmodel命令綁定
- 7. 有沒有辦法將代表命令綁定到圖像?
- 8. WPF MVVM:綁定命令到事件
- 9. WPF日曆:綁定到MVVM命令?
- 10. 將實體綁定到WPF表單MVVM
- 11. WPF列表框綁定沒有顯示
- 12. 使用MVVM在WPF中綁定命令
- 13. 簡單的WPF MVVM綁定問題
- 14. 將命令綁定到WPF中的ComboBoxItem
- 15. 將ComboBoxItem綁定到WPF中的命令?
- 16. 命令綁定MVVM
- 17. 將列表框綁定到列表中的簡單方法<string>在wpf中,安全更新
- 18. 有沒有辦法將數據綁定到WPF中編輯的雙打列表?
- 19. WPF列表框與MVVM綁定
- 20. MVVM命令綁定
- 21. 爲列表框內的複選框命令和命令參數WPF/MVVM綁定不同的源
- 22. 有沒有辦法將DataTrigger綁定到WPF中的模板?
- 23. WPF MVVM ContextMenu綁定到ObservableCollection <string>不命中命令
- 24. WPF MVVM內的DataTemplate綁定到列表框的SelectedItem父列表框的
- 25. 綁定命令MVVM
- 26. 如何將命令綁定到祖先datacontext? WPF :: MVVM
- 27. 將命令綁定到ListView項MVVM正確的方式
- 28. 將單選按鈕綁定到SQL表中的簡單方法#
- 29. 上下文菜單項命令綁定使用MVVM的WPF
- 30. 將列表綁定到WPF中的列表框中
這真的有助於指向正確的方向。謝謝。 – Paul
這其實很好。但是當你不幸有一個很好的解決方案時,比如'Loaded'事件,你需要一些'EventToCommand'框架。 –