我正在尝试实现一些非常简单的东西,但我正在WPF的第一步,我遇到了一些问题。我有一个名为Component的类,它有一个名为Vertices的属性。顶点是Point类型的通用列表。我想要的是将顶点属性绑定到列表框。通过在列表框声明中的XAML中使用此代码,这很容易:
ItemsSource="{Binding Path=Component.Vertices, Mode=OneWay, Converter={StaticResource verticesconverter},UpdateSourceTrigger=PropertyChanged}"
棘手的部分是当我尝试为列表框创建数据窗口时。我希望列表框的每一行都显示一个文本框,其中包含Vertex(Point.X,Point.Y)的值和一个允许我删除该项的按钮。你能帮我解决一下datatemplate定义吗?下面的代码不能将X,Y值绑定到两个单独的文本框中。你能指出我的错误,为什么文本框中没有显示任何内容?
<ListBox ItemsSource="{Binding Path=Component.Vertices, Mode=OneWay,UpdateSourceTrigger=PropertyChanged}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal" Margin="0,10,0,0">
<TextBox Text="{Binding X}" MinWidth="35" MaxWidth="35"/>
<TextBox Text="{Binding Y}" MinWidth="35" MaxWidth="35"/>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
/ListBox>
答案 0 :(得分:1)
这样的事情:
<ListBox ... Grid.IsSharedSizeScope="True">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition SharedSizeGroup="A"/>
<ColumnDefinition SharedSizeGroup="B"/>
<ColumnDefinition SharedSizeGroup="C"/>
</Grid.ColumnDefinitions>
<Grid.Children>
<TextBlock Grid.Column="0" Text="{Binding X}" Margin="5"/>
<TextBlock Grid.Column="1" Text="{Binding Y}" Margin="5"/>
<Button Grid.Column="2" Tag="{Binding}" Margin="5" Click="Button_Click" Content="Remove"/>
</Grid.Children>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
事件处理程序:
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
Button senderB = (Button)sender;
Point pt = (Point)senderB.Tag;
Collection.Remove(pt);
}
注意:除非您的绑定集合实现INotifyCollectionChanged
(您可以使用标准实现:ObservableCollection<T>
)
编辑:常见的绑定 - 失败原因:
1.绑定来源不是公共财产 - &gt;让它成为一个
2.绑定路径不是绝对的,没有DataContext从中开始
- &GT;在构造函数中将窗口的DataContext设置为自身(this
)或...
- &GT;将Binding中的ElementName设置为窗口名称(如果属性为
Edit2:如果您的集合包含顶点,并且您的Vertex
类包含属性名称为Point
的点,则需要将绑定更改为{Binding Point.X}
和{{1} ,请在下次发布更多代码。