我遇到了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" />
答案 0 :(得分:1)
我可以立即看到两个问题。
当它说&#34;绑定&#34;不支持WPF项目,它指的是您在XAML中使用的单词来尝试绑定Text属性。这是一个拼写错误 - 它应该是{Binding ... }
,而不是{binding ... }
其次,关于MAMON和TENMON,你的SelectedItem(可能是一个DataGridCell或类似的东西 - 当你说'#34; DataGridView,&#34;对吗?)时,它就是一个错字。 ; t具有基于您的列的属性,即使这样,所选单元格也不会知道除了它之外的任何列。您无法通过以下列访问列只需在项目后添加.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模式。