簡體   English   中英

XAML - 在兩個 UserControls 之間綁定 ElementName

[英]XAML - Binding ElementName between two UserControls

我目前正在學習 WPF 和數據綁定讓我......感謝任何幫助。

所以我有兩個 UserControl,比如說 1 和 2,在里面,它們只是在 MainWindow.xaml 中並排顯示。 在 UserControl2 中,我想將一些東西綁定到 UserControl1 的一個元素上。 就像下面的代碼失敗(顯然):

{Binding ElementName=FolderView, Path=SelectedValue, Mode=OneWay}

其中FolderView是UserControl1中的TreeView我想在UserControl2中獲取它的屬性。

我對 MVVM 還是很陌生。 我認為 static ViewModel 會解決它(如果這不好,請糾正我)。 但是TreeViewSelectedValue屬性是readonly的,我不知道如何將它綁定到 ViewModel。

就像你說的 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

忘記所有的綁定。 原來,當TreeViewSelectedItemChanged時。 RoutedPropertyChangedEventArgs<object>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.TVVMMainViewModel的一個 static (這是我能想到的唯一方法,如果 static 在這種情況下是好的)屬性。 只是將所有相關代碼放在這里以供將來參考。

樹視圖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();
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM