2015-05-29 105 views
3

我有兩個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(); 
    } 

類的定義如下; 其中ViewModelBaseINotifyPropertyChanged繼承並實現它。

RelayCommand繼承自ICommand並實現它。

而現在,這一切後,我的問題是,當我點擊Search按鈕,期待TextBox進行更新,我看到的一切都被調用和更新中,該酒店被提出,但TextBox不更新爲ContactId的值。

任何想法?

+1

這個問題很好*,很好,包括所有相關的信息! – BradleyDotNET

+0

非常感謝!我也看了你的答案,並明確瞭解問題所在。謝謝! – Idanis

回答

2

很簡單,你正在使用兩個不同的對象!

DataContext = new SearchBarViewModel()SearchBarView中設置DataContext的按鈕居住的地方爲SearchBarViewModel的實例。沒問題。

但你做

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

另一種觀點認爲,這創建對象的實例。因此,命令調用會更改其視圖模型的實例上的變量,而其他實例顯然看不到該變量。

用戶控件(如搜索欄)通常沒有自己的數據上下文,您可以使用依賴項屬性來允許主虛擬機將其屬性綁定到它。這是我在你的情況下采取的方法。解決這個問題的另一種方法是將一個通用實例傳遞給一個或兩個控件,以便他們查看同一個對象。

+0

嗨,你能給我舉一個例子,說明你用'DependencyProperty'的意思嗎?它應該在我的'SearchBarViewModel'類中定義嗎?我需要多個嗎?謝謝!! – Idanis

+0

@Idanis網上有很多例子,你可以針對你要找的東西更具體一些嗎?對於它的價值,DP進入視圖(用戶控件的)*而不是視圖模型。每個您希望作爲綁定目標的資產都需要一個。 – BradleyDotNET