2014-10-31 73 views
0

我遇到了XAML的問題。我想給我的文本框綁定到我的datagridview。這是我到目前爲止已經寫的:從Datagrid(WPF)綁定文本框

<TextBox x:Name="txtMaMH" 
     HorizontalAlignment="Left" 
     Height="23" 
      Margin="178,78,0,0" 
     TextWrapping="Wrap" 
     Text="{binding SelectedItem.MAMH, ElementName=dgvMH}" 
     VerticalAlignment="Top" 
     Width="120"/> 

但我收到兩個錯誤:

綁定在Windows演示基礎(WPF)項目不支持。

未找到類型「綁定」。驗證您是否缺少程序集引用,並且所有引用的程序集都已構建。

如何解決這個問題?請幫助我,謝謝

還有一件事。我有一個Datagridview(dgvMH),它有2列MAMON,TENMON。我想填充我的文本框txtMaMon,txtTenMon,只要我點擊該行的dgvMH。這是真正的XAML代碼嗎?糾正我,如果我錯了,謝謝

<TextBox x:name = "txtMaMon" Text="{Binding SelectedItem.MAMON, ElementName=dgvMH}"/> 
<TextBox x:name = "txtTenMon" Text="{Binding SelectedItem.TENMON, ElementName=dgvMH}"/> 
<DataGrid x:Name="dgvMH" /> 

回答

1

兩個問題,我可以馬上看到蝙蝠。

  1. 當它說:「結合」是不是在WPF工程配套,它指的是你在XAML用來嘗試你的Text屬性綁定的話。這是一個錯字 - 它應該閱讀{Binding ... },不{binding ... }

  2. 第二,關於MAMON和天門,你的SelectedItem(想必DataGridCell或類似的東西 - 這是一個錯字,當你說「的DataGridView,」右)沒有按沒有基於你的列的屬性,即使它已經這樣做了,選中的單元格也不會知道除了它所在的列之外的任何列。不能通過在項目後添加.ColumnName來訪問列。 (這是可能的,我在這裏誤解的東西 - 你的變量名不溝通的對我。)

如果你問如何填充文本框與當前選定的項目,你應該只綁定到SelectedItem屬性。下面是如何做到這一點有一個小的測試視圖模型的例子:

這裏的DataGrid的XAML:

<DataGrid Name="dataGrid1" 
      ItemsSource="{Binding Items}" 
      SelectedItem="{Binding SelectedCells, Mode=OneWayToSource}" /> 

而這裏的TestViewModel和TestModel:

public class TestViewModel : INotifyPropertyChanged 
{ 
    public TestViewModel() 
    { 
     this.Items = new List<TestModel>() { new TestModel { CompanyName = "a", FirstName = "b", LastName = "c" }, new TestModel { CompanyName = "1", FirstName = "2", LastName = "3" } }; 
    } 

    public List<TestModel> Items { get; set; } 

    private TestModel selectedCells; 
    public TestModel SelectedCells 
    { 
     get { return selectedCells; } 
     set { 
      selectedCells = value; 

      NotifyPropertyChanged("SelectedCells"); 
     } 
    } 

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

public class TestModel 
{ 
    public string CompanyName { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
} 

的TestViewModel的項目屬性提供DataGrid中項目的來源。當選擇其中之一時,DataGrid的SelectedItem屬性中的更改將推送到TestViewModel中的屬性。如果你想,你可以將TextBox的內容綁定到SelectedItem,並創建一個轉換器,在你的模型和你想要的字符串表示之間移動。或者,更簡單一點,你可以擁有一個單獨的屬性(例如SelectedItemToText),該屬性接受SelectedItem並在您的ViewModel中以某種方式對其進行字符串化,儘管這遠離MVVM模式。

+0

第一個問題已解決,謝謝,這是一個錯字錯誤。 第二,它是Datagrid(不Datagridview,因爲我錯誤WPF與WF對不起!) 我會將MAMON,TENMON更改爲COURSEID,COURSENAME。你可以向我展示一個具有SelectedItem屬性的明智代碼嗎?我是WPF的新手:( – 2014-10-31 17:41:12

+0

好吧,我可以嘗試,但我不能保證它會工作,因爲我沒有時間充分模擬DataGrid。給我一秒。 – furkle 2014-10-31 17:43:53

+0

@NguyễnQuangKhảiI已經用一些代碼更新了答案。 – furkle 2014-10-31 18:03:19