gpt4 book ai didi

wpf - 如何在WPF(MVVM)中收到对控件的引用?

转载 作者:行者123 更新时间:2023-12-03 10:13:43 24 4
gpt4 key购买 nike

在我的WPF MVVM项目中,我有一个按钮,该按钮触发一个函数,该函数应将节点添加到xml,然后将焦点设置为文本框。
我的问题是,我如何获得对控件的引用?

看法:

<Button Command="{Binding Path=ButtonAddCategory_Click}" />

ViewModel:
RelayCommand buttonAddCategory_Click;
public ICommand ButtonAddCategory_Click
{
get
{
return buttonAddCategory_Click ?? (buttonAddCategory_Click = new RelayCommand(param => this.AddCategory(),
param => true));
}
}

public void AddCategory()
{
...
//get the "node" -> reference?
XmlNode selectedItem = (XmlNode)treeView.SelectedItem;
..
//add the node to the xml
..
//change focus -> reference?
textBoxTitel.Focus();
textBoxTitel.SelectAll();
}

最佳答案

不要在ViewModel中执行此操作。 ViewModel应该对 View 一无所知。

您可以在代码隐藏中进行操作:

  • 在代码隐藏中处理TreeView.SelectedItemChanged事件,并更新ViewModel上的SelectedItem属性(也可以通过附加行为来完成)
  • 集中TextBox,从ViewModel引发一个事件,并在后台代码中处理它:

  • ViewModel:
    public XmlNode SelectedItem { get; set; }

    public event EventHandler FocusTitle;

    public void AddCategory()
    {
    ...
    //get the "node" -> reference?
    XmlNode selectedItem = this.SelectedItem;
    ..
    //add the node to the xml
    ..
    // Notify the view to focus the TextBox
    if (FocusTitle != null)
    FocusTitle(this, EventArgs.Empty);

    }

    背后的代码:
    // ctor
    public MyView()
    {
    InitializeComponent();
    DataContextChanged += MyView_DataContextChanged;
    }

    private void MyView_DataContextChanged(object sender, DependencyPropertyChangedEventArgs e)
    {
    MyViewModel vm = (MyViewModel)e.NewValue;
    vm.FocusTitle += ViewModel_FocusTitle;
    }

    private void TreeView1_SelectedItemChanged(object sender, RoutedPropertyChangedEventHandler<Object> e)
    {
    MyViewModel vm = (MyViewModel)DataContext;
    vm.SelectedItem = (XmlNode)e.NewValue;
    }

    private void ViewModel_FocusTitle(object sender, EventArgs e)
    {
    textBoxTitle.Focus();
    }

    关于wpf - 如何在WPF(MVVM)中收到对控件的引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5595949/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com