XAML -在两个用户控件之间绑定ElementName

dm7nw8vv  于 2022-12-16  发布在  其他
关注(0)|答案(2)|浏览(145)

我目前正在学习WPF和数据绑定让我...任何帮助是感激的。
因此,我有两个UserControl,比如说1和2,在MainWindow.xaml中只是并排显示。在UserControl2中,我想将一些东西绑定到UserControl1的元素。就像下面失败的代码(显然):

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

其中FolderView是UserControl1中的TreeView我想在UserControl2中获取其属性。
我对MVVM还是个新手,我认为静态的ViewModel可以解决这个问题(如果不好,请纠正我),但是TreeViewSelectedValue属性是readonly,我不知道如何将它绑定到ViewModel。

bvn4nwqk

bvn4nwqk1#

就像你说的MVVM能帮上忙。
你为你的每个用户控件创建一个视图。并且你为它们中的每一个创建一个视图模型。我有同样的问题,在第一次看这2他们帮助了我很多与你的问题。如果你需要更多的帮助,只是评论,我可以解释一些更多。
https://social.msdn.microsoft.com/Forums/sqlserver/en-US/ecc7f9e9-ed16-40d9-89b9-d04040c46676/send-or-bind-parameters-from-a-usercontrol-to-another-usercontrol-in-wpf-mvvm?forum=wpf
https://softwareengineering.stackexchange.com/questions/408890/wpf-usercontrol-reuse-with-mvvm

vom3gejh

vom3gejh2#

忘了所有的绑定吧。原来当一个TreeViewSelectedItemChangedRoutedPropertyChangedEventArgs<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的一个静态(这是我能想到的唯一方法,如果静态在这种情况下是好的,就用idk)属性。

  • 树视图虚拟机.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();
    }
}

相关问题