文本框绑定不工作

本文关键字:工作 绑定 文本 | 更新日期: 2023-09-27 17:51:16

我有两个UserControls:

1) ContactDetailsView .

2) SearchBarView .

SearchBarView中,我有一个Search按钮,当单击时引发命令:Command="{Binding SearchCommand}"

SearchBarView代码后面,我有以下代码:DataContext = new SearchBarViewModel();

ContactDetailsView中我有以下代码:

UserControl定义中的

xmlns:ViewModel="clr-namespace:Accounts_Manager.UserControls.SearchBar"及其下面的代码:

<UserControl.DataContext> <ViewModel:SearchBarViewModel /> </UserControl.DataContext>

我也有一个TextBox与以下定义:

<TextBox x:Name="ContactNameTextBox" FontFamily="Times New Roman" Foreground="DarkRed" HorizontalAlignment="Stretch" HorizontalContentAlignment="Center" IsEnabled="False" Grid.Column="0" Text="{Binding ContactId, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>

我有一个名为SearchBarViewModel的类,代码如下:

    public string ContactId
    {
        get { return m_contactId; }
        set
        {
            m_contactId = value;
            OnPropertyChanged("ContactId");
        }
    }
    public ICommand SearchCommand
    {
        get { return m_searchCommand ?? (m_searchCommand = new RelayCommand(SearchContact)); }
        set { m_searchCommand = value; }
    }
    public void SearchContact(object parameter)
    {
        CurrentContact = DbHandler.Search("עידן");
        ContactId = CurrentContact.FirstName + " " + CurrentContact.LastName;
        BankId = CurrentContact.BankName;
        AccountNumber = CurrentContact.AccountNumber.ToString();
    }

类是这样定义的;SearchBarViewModel : ViewModelBase,其中ViewModelBase继承并实现了INotifyPropertyChanged

RelayCommand继承并实现了ICommand

现在,在这一切之后,我的问题是,当我单击Search按钮,期望TextBox被更新时,我看到所有东西都被调用和更新,属性被提出,但TextBox没有更新ContactId的值。

任何想法?

文本框绑定不工作

很简单,你在使用两个不同的对象!

SearchBarView中的

DataContext = new SearchBarViewModel()将按钮所在的DataContext设置为SearchBarViewModel的实例。没问题。

但是你做了

<UserControl.DataContext>
    <ViewModel:SearchBarViewModel />
</UserControl.DataContext>
在另一个视图中,which 创建了该对象的实例。因此,命令调用改变了视图模型的实例上的一个变量,而其他实例显然没有看到这个变量。

用户控件(如搜索栏)通常没有自己的数据上下文,您使用依赖属性来允许主VM将其属性绑定到它。这就是我处理你的方法。另一种解决方法是将一个公共实例传递给一个或两个控件,这样它们就可以查看同一个对象。