gpt4 book ai didi

c# - 文本框绑定(bind)不起作用

转载 作者:行者123 更新时间:2023-11-30 16:54:27 24 4
gpt4 key购买 nike

我有两个 UserControls :

1) ContactDetailsView .

2) SearchBarView .

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

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

ContactDetailsView我有以下代码:

xmlns:ViewModel="clr-namespace:Accounts_Manager.UserControls.SearchBar"UserControl 的定义中以及它下面的代码:

<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>

在另一个 View 中, 创建该对象的一个​​实例。因此,命令调用更改了 View 模型的它的实例上的一个变量,而另一个实例显然看不到。

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

关于c# - 文本框绑定(bind)不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30534433/

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