嗨,我在ComboBox中遇到绑定问题。我想将ComboBox项绑定到ListView列,并作为选定值返回选定列上定义的附加属性的值。
在下面的示例中,您可以看到显示所选列宽度的工作示例。如果您尝试将ComboBox中的 SelectedValuePath 更改为(loc:SampleBehavior.SampleValue),则会出现绑定错误:
BindingExpression路径错误:在'对象'上找不到'(u:SearchableListView.SearchMemberPath)'属性'''GridViewColumn'
<Window x:Class="Problem_Sample1.Window1" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:loc="clr-namespace:Problem_Sample1" WindowStartupLocation="CenterScreen" Title="Window1" Height="300" Width="300"> <DockPanel> <ComboBox DockPanel.Dock="Top" x:Name="combobox" ItemsSource="{Binding Path=View.Columns, ElementName=listview}" DisplayMemberPath="Header" SelectedValuePath="Width"> </ComboBox> <StatusBar DockPanel.Dock="Bottom"> <TextBlock> <TextBlock Text="Selected column (value): " /> <TextBlock Text="{Binding Path=SelectedValue, ElementName=combobox}" /> </TextBlock> </StatusBar> <ListView x:Name="listview"> <ListView.View> <GridView> <GridViewColumn Header="Name" Width="101" loc:SampleBehavior.SampleValue="201" /> <GridViewColumn Header="Surname" Width="102" loc:SampleBehavior.SampleValue="202" /> </GridView> </ListView.View> </ListView> </DockPanel> </Window>
SampleBehavior.cs
using System.Windows; using System.Windows.Controls; namespace Problem_Sample1 { public static class SampleBehavior { public static readonly DependencyProperty SampleValueProperty = DependencyProperty.RegisterAttached( "SampleValue", typeof (int), typeof (SampleBehavior)); [AttachedPropertyBrowsableForType(typeof(GridViewColumn))] public static int GetSampleValue(GridViewColumn column) { return (int)column.GetValue(SampleValueProperty); } [AttachedPropertyBrowsableForType(typeof(GridViewColumn))] public static void SetSampleValue(GridViewColumn column, int value) { column.SetValue(SampleValueProperty, value); } } }
感谢您提供任何帮助或建议。
答案 0 :(得分:0)
由于我偶然发现了(这是第一次合理搜索的谷歌搜索结果),我现在也可以写一个答案。
请求的功能实际上完全按照询问的方式提供。
<ComboBox DockPanel.Dock="Top"
x:Name="combobox"
ItemsSource="{Binding Path=View.Columns, ElementName=listview}"
DisplayMemberPath="Header"
SelectedValuePath="(loc:SampleBehavior.SampleValue)">
将附加的属性路径放在(大括号)中非常重要,否则它会尝试对源对象进行一些奇怪的查找。
此外,问题中的错误消息指出“ BindingExpression路径错误:'(u:SearchableListView.SearchMemberPath)'属性未找到'object'''GridViewColumn'”,因此错误消息绝对与完全不同的属性相关,而不是“(loc:SampleBehavior.SampleValue)”。这种不一致似乎是与为减少代码示例而进行的编辑相关的问题