2013-12-16 38 views
0

我想實現ViewModel的自定義文本框,這是我第一次做一個ViewModel試圖做this tutorialWPF文本框與ViewModel

它的文件資源管理器應用程序只有一個string address;需要(不是一個集合),其中保存自定義文本框「ExploreAddress」的地址。
這個定製的文本框具有文本和圖像(圖標爲當前目錄,它不是靜態的)

enter image description here

public class ExploreAddressVM : INotifyPropertyChanged 
{ 
    private string _text; 
    private System.Windows.Media.ImageSource _image; 

    public string Text 
    { 
     get { return _text; } 
     set { _text = value; } 
    } 
    public System.Windows.Media.ImageSource Image 
    { 
     get { return _image; } 
     set { _image = value; } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

XAML:

<UserControl.DataContext> 

    <l:ExploreAddressViewModel/> 

</UserControl.DataContext> 

<TextBox x:Name="txtAddress" Margin="34,5,32,0" TextWrapping="Wrap" 
Text="{Binding Name}" Height="25" 
VerticalAlignment="Top" FontWeight="Bold" MinHeight="25" MaxHeight="25"> 
      <TextBox.Background> 
       <ImageBrush ImageSource="{Binding Image}" Stretch="None"/> 
      </TextBox.Background> 
     </TextBox> 

這是綁定的理想解決方案具有自定義文本框的ViewModel

隱藏代碼:

private void UserControl_Loaded(object sender, RoutedEventArgs e) 
    { 
     exploreAddress = (ExploreAddressViewModel)base.DataContext; 
     exploreAddress.Text = "My Computer"; 
    } 
    private void GoButton_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show(txtAddress.Text); 
    } 

回答

2

實際上,我不知道爲什麼我需要創建一個類 ExploreAddress的,也許我可以把它在同一 ExploreAddressViewModel類

你並不需要。

你有重複的東西在那裏,只是刪除該類。

而且,你的財產製定者必須提高PropertyChanged事件,像這樣:

public class ExploreAddressViewModel : INotifyPropertyChanged 
{ 
    private string _name 
    public string Name 
    { 
     get { return _name; } 
     set 
     { 
      _name = value; 
      RaisePropertyChanged("Name"); 
     } 
    } 

    private ImageSource _image; 
    public ImageSource Image 
    { 
     get { return _image; } 
     set 
     { 
      _image = value; 
      RaisePropertyChanged("Image"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
    private void RaisePropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 
     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

我這樣做了,該文本框是空的,我更新了代碼隱藏 –

+0

@murhaf文本框,勢必對問題ViewModel的'Name'屬性,但是你的代碼正在分配'Text'屬性。哪一個是正確的? –

+0

對不起,我將屬性名稱更改爲文本,但我沒有更新它的問題,考慮它仍然是'名稱' –