文本框绑定不工作
本文关键字:工作 绑定 文本 | 更新日期: 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将其属性绑定到它。这就是我处理你的方法。另一种解决方法是将一个公共实例传递给一个或两个控件,这样它们就可以查看同一个对象。