首页 文章

从Datagrid(WPF)绑定文本框

提问于
浏览
0

我在使用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)项目不支持>绑定 . 找不到类型'绑定' . 验证您是否缺少程序集引用,并且已构建所有引用的程序集 .

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

还有一件事 . 我有一个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 回答

  • 1

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

    • 当它说"binding"在WPF项目中不支持时,它指的是您在XAML中使用的单词,试图绑定您的Text属性 . 这是一个错字 - 它应该是 {Binding ... } ,而不是 {binding ... }

    • 其次,关于MAMON和TENMON,你的SelectedItem(可能是一个DataGridCell或类似的东西 - 当你说“DataGridView”时这是一个错字,对吗?)没有基于你的列的属性,即使它有,所以选定的单元格不会知道除了它之外的任何列 . 只能在项目后添加.ColumnName来访问列 . (这可能是我在这里误解了一些东西 - 你的变量名不能与我沟通太多 . )

    如果您询问如何使用当前选定的项填充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模式的更多 .

相关问题