2014-10-31 104 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