我目前正在學習 WPF 和資料系結讓我...任何幫助表示贊賞。
所以我有兩個 UserControl,比如說 1 和 2,在里面,它們只是在 MainWindow.xaml 中并排顯示。在 UserControl2 中,我想將一些東西系結到 UserControl1 的一個元素上。就像下面的代碼失敗(顯然):
{Binding ElementName=FolderView, Path=SelectedValue, Mode=OneWay}
其中 FolderView 是TreeViewUserControl1 中的一個,我想在 UserControl2 中獲取它的屬性。
我對 MVVM 還是很陌生。我認為靜態 ViewModel 可以解決它(如果這不好,請糾正我)。但是 a 的SelectedValue屬性TreeView是readonly,我不知道如何將它系結到 ViewModel。
uj5u.com熱心網友回復:
就像你說的 MVVM 可以提供幫助。
您為每個用戶控制元件創建一個視圖。然后為它們中的每一個創建一個 Viewmodel。我第一次看到這兩個問題時遇到了同樣的問題,他們幫我解決了你的問題。如果您需要更多幫助,請發表評論,我可以解釋更多。
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ecc7f9e9-ed16-40d9-89b9-d04040c46676/send-or-bind-parameters-from-a-usercontrol-to-another-usercontrol-在-wpf-mvvm?forum=wpf
https://softwareengineering.stackexchange.com/questions/408890/wpf-usercontrol-reuse-with-mvvm
uj5u.com熱心網友回復:
忘記所有的系結。原來,當 aTreeView的SelectedItemChanged. RoutedPropertyChangedEventArgs<object>'s包含我需要的NewValue資訊,即Tag屬性。
private void FolderView_SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
{
MainViewModel.TVVM.TESTBOX = ((TreeViewItem)(e.NewValue)).Tag.ToString();
}
MainViewModel.TVVM.TESTBOX只是一個{get;set;}并且是一個靜態(這MainViewModel.TVVM是我能想到的唯一方法,idk,如果在這種情況下靜態是好的)屬性MainViewModel。只是將所有相關代碼放在這里以供將來參考。
樹視圖VM.cs
public class TreeViewVM : VMBase
{
private string _testbox;
public string TESTBOX
{
get { return _testbox; }
set { _testbox = value;
OnPropertyChange(nameof(TESTBOX));}
}
}
主視圖模型.cs
public class MainViewModel
{
public static TreeViewVM TVVM { get; set; }
public MainViewModel()
{
TVVM = new TreeViewVM();
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/506336.html
