从Datagrid(WPF)绑定文本框
我遇到了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" />
两个问题,我可以马上看到蝙蝠。
当它说:“结合”是不是在WPF工程配套,它指的是你在XAML用来尝试你的Text属性绑定的话。这是一个错字 - 它应该阅读
{Binding ... }
,不{binding ... }
第二,关于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模式。
第一个问题已解决,谢谢,这是一个错字错误。 第二,它是Datagrid(不Datagridview,因为我错误WPF与WF对不起!) 我会将MAMON,TENMON更改为COURSEID,COURSENAME。你可以向我展示一个具有SelectedItem属性的明智代码吗?我是WPF的新手:( – 2014-10-31 17:41:12
好吧,我可以尝试,但我不能保证它会工作,因为我没有时间充分模拟DataGrid。给我一秒。 – furkle 2014-10-31 17:43:53
@NguyễnQuangKhảiI已经用一些代码更新了答案。 – furkle 2014-10-31 18:03:19