TextBox绑定不起作用

时间:2015-05-29 16:20:23

标签: c# wpf binding textbox command

我有两个UserControls

1)ContactDetailsView

2)SearchBarView

SearchBarView中,我有一个Search按钮,点击后会发出命令:Command="{Binding SearchCommand}"

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

ContactDetailsView我有以下代码:

<{1}}的定义中的

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的值进行更新。

有什么想法吗?

1 个答案:

答案 0 :(得分:2)

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

DataContext = new SearchBarViewModel()中的

SearchBarView将按钮所在的DataContext设置为SearchBarViewModel的实例。没问题。

但你做了

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

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

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