2012-11-02 20 views
0

所以我想學習WPF中的MVVM設計模式,我要做到以下幾點:如何將textbox.Text財產WPF MMVM設計結合

在外部類我有一個的ObservableCollection _students這是綁定到使用MVVM設計模式的WPF窗口上的列表視圖。該列表視圖僅顯示學生姓名和年齡。

public class Student 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
    public string Course { get; set; } 
    public DateTime JoiningDate { get; set; } 
} 


public class ViewModel : INotifyPropertyChanged 
{ 
    private ObservableCollection<Student> _students; 

    protected void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged!=null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 

    public ObservableCollection<Student> Students 
    { 
     get 
     { 
      return _students; 
     } 
     set 
     { 
      _students = value; 
      NotifyPropertyChanged("Students"); 
     } 
    } 

所有的不錯,但我想把一個文本框,並將其設置爲顯示列表視圖的選定項目的課程屬性。這意味着我必須

  1. 得到ListView的選擇指數(OK)
  2. 綁定的textbox.Text屬性生[該索引] .Course

我被困在2.任何幫助?

+0

不知道語法韓德爾這一點,但你可以在'TextBox'綁定到'SelectedValue'了''ListBox' <文本框文本=「{綁定的ElementName = StudentsList,路徑=的SelectedValue .Course}「/>' - 儘管我認爲這不會起作用。 – ChrisF

回答

1

我會以另一種方式解決這個問題。

看看這個post

另一種方式是您的ViewModel包含一個Student屬性(例如SelectedStudent),該屬性綁定到listView的SelctedItem。然後,你可以通過

{Binding Path=SelectedStudent.Course} 
1

假設你的列表視圖綁定到SampleData類型的集合象下面這樣:

SampleData.cs

public class SampleData 
{ 
    public int Id { get; set; } 

    public string Text { get; set; } 

    public decimal Value { get; set; } 
} 

然後綁定ListView控件的ItemsSource的集合。如果將ItemsSource屬性綁定到ViewModel上的屬性,或者像代碼如下所示將其綁定到代碼隱藏中,無所謂。

var source = new List<SampleData>(); 

source.Add(new SampleData() { Id = 1, Text = "AAA" }); 
source.Add(new SampleData() { Id = 2, Text = "BBB" }); 
source.Add(new SampleData() { Id = 3, Text = "CCC" }); 
source.Add(new SampleData() { Id = 4, Text = "DDD" }); 
source.Add(new SampleData() { Id = 5, Text = "EEE" }); 

您可以將TextBox的Text屬性直接綁定到View上的SelectedItem。

<StackPanel Orientation="Horizontal"> 
    <ListView x:Name="listView1" /> 

    <TextBox Text="{Binding ElementName=listView1, Path=SelectedItem.Text}" /> 
</StackPanel>