我是WPF的新手并且一整天都试图解决这个问题:
我有一个包含六个公共属性的列表(阅读有关仅绑定到公共属性的wpf)。
在我的主窗口中,我有两个控件;一个包含三列和三个文本框的数据网格。我希望将三个datagrid列数据绑定到我的List的三个属性,并将我的List的其余三个属性数据绑定到文本框(每个文本框一个属性)。 datagrid数据绑定工作正常:myDataGrid.ItemsSource = myList;
//specific column binding is in xaml as expected eg
Binding="{Binding Title, Mode=TwoWay}"
麻烦在于文本框。我打算让文本框在底层列表中显示“当前项目”,这意味着当用户选择不同的数据网格行时,文本框应该更改以显示“当前所选列表项”的数据绑定属性的值。简单地绑定像这样的texbox就不起作用了:
Text="{Binding SomePropertyName}"
我已经阅读了有关使用CollectionViewSource的信息,以便在xaml绑定中使用正斜杠来促进“当前项目”指针,但是没有运气,即
<Textbox Text="{Binding Path=/someProperty}"
我还读过关于使用'elementname'绑定将数据绑定到datagrid / listview项目的人,但这不是我所追求的。我认为应该很容易,至少在winforms中是这样的!
提前致谢。
答案 0 :(得分:1)
这很容易,但有一点需要注意。默认情况下,您可以在DataGrid
中选择多行,在这种情况下,文本框中只会显示一个值。您可以通过在数据网格上设置SelectionMode="Single"
来更改此设置。
<StackPanel>
<DataGrid x:Name="PersonsGrid" ItemsSource="{Binding Persons}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First name" Binding="{Binding FirstName}" />
<DataGridTextColumn Header="Last name" Binding="{Binding LastName}" />
<DataGridTextColumn Header="Age" Binding="{Binding Age}" />
</DataGrid.Columns>
</DataGrid>
<TextBox Text="{Binding SelectedItem.Address, ElementName=PersonsGrid}" />
</StackPanel>
这是有效的,因为我的示例中SelectedItem
的基础类型为Person
。