从Datagrid(WPF)绑定文本框

时间:2014-10-31 17:19:59

标签: wpf

我遇到了XAML的问题。我想给我的文本框一个绑定到我的datagridview。这是我到目前为止所写的:

<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 Presentation Foundation(WPF)项目不支持

绑定。

     

类型&#39;绑定&#39;没找到。验证您是否缺少程序集引用,并且已构建所有引用的程序集。

如何解决这个问题?请帮帮我,谢谢

还有一件事。我有一个Datagridview(dgvMH)有2列MAMON,TENMON。每当我点击那个dgvMH中的一行时,我想填充我的文本框txtMaMon,txtTenMon。这是真正的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 个答案:

答案 0 :(得分:1)

我可以立即看到两个问题。

  1. 当它说&#34;绑定&#34;不支持WPF项目,它指的是您在XAML中使用的单词来尝试绑定Text属性。这是一个拼写错误 - 它应该是{Binding ... },而不是{binding ... }

  2. 其次,关于MAMON和TENMON,你的SelectedItem(可能是一个DataGridCell或类似的东西 - 当你说'#34; DataGridView,&#34;对吗?)时,它就是一个错字。 ; t具有基于您的列的属性,即使这样,所选单元格也不会知道除了它之外的任何列。您无法通过以下列访问列只需在项目后添加.ColumnName。 (这可能是我在这里误解了一些东西 - 你的变量名称与我沟通不多。)

  3. 如果您要询问如何使用当前选定的项填充TextBox,则应该只绑定到SelectedItem属性。以下是使用小型测试ViewModel进行此操作的示例:

    这是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的Items属性提供DataGrid中项目的来源。选择其中一个时,DataGrid的SelectedItem属性中的更改将被推送到TestViewModel中的属性。如果需要,您也可以将TextBox的内容绑定到SelectedItem,并创建一个转换器以在模型和所需的字符串表示之间移动。或者,更简单地说,你可以有一个单独的属性(例如SelectedItemToText),它接受SelectedItem并在ViewModel中以某种方式将其字符串化,尽管这远离MVVM模式。