我似乎找不到正确的语法来允许将附加属性用作ComboBox的DisplayMemberPath。
该属性是SelectorSwitchedControl.NameForSelector
它在名称空间“ LocalTest”中,该名称空间映射到XAML前缀“ local”。
这是代码...
<UserControl x:Class="Playground.SelectorSwitchedControlTest.SelectorSwitchedControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:glc="clr-namespace:Playground.CommonControls"
xmlns:local="clr-namespace:Playground.SelectorSwitchedControlTest"
Background="Transparent">
<Border x:Name="MainBorder"
BorderBrush="Gray" BorderThickness="1">
<DockPanel>
<glc:FixedToolBar DockPanel.Dock="Top">
<ComboBox x:Name="MainSelector"
ItemsSource="{Binding Children, ElementName=MainPanel}"
DisplayMemberPath="(local:SelectorSwitchedControl.NameForSelector)" />
</glc:FixedToolBar>
<local:SelectorSwitchedControlPanel x:Name="MainPanel" />
</DockPanel>
</Border>
</UserControl>
...由于某种原因,这给了我一个例外,即“本地前缀”未映射到名称空间。”我不知道为什么要说,就像我删除了“ DisplayMemberPath”行一样,“”标记的呈现方式就像应该证明名称空间已映射一样。
我也尝试了以下所有方法...
DisplayMemberPath =“ local:SelectorSwitchedControl.NameForSelector”
DisplayMemberPath =“(local:SelectorSwitchedControl.NameForSelector)”
DisplayMemberPath =“ SelectorSwitchedControl.NameForSelector”
DisplayMemberPath =“(SelectorSwitchedControl.NameForSelector)”
DisplayMemberPath =“ LocalTest.SelectorSwitchedControl.NameForSelector”
DisplayMemberPath =“(LocalTest.SelectorSwitchedControl.NameForSelector)”
我知道那只是那些我的头脑无法正常工作的日子,我想念一些简单的东西,但这却使我发疯!那么正确的语法是什么?
最佳答案
DisplayMemberPath-每个项目的显示字符串属性的路径。将其设置为“ NameForSelector”,而不是“ {Binding NameForSelector}”。
<DockPanel>
<ComboBox x:Name="MainSelector" ItemsSource="{Binding Children}" DisplayMemberPath="NameForSelector" />
</DockPanel>
public class SelectorSwitchedControl
{
public string Name { get; set; }
public string NameForSelector{ get; set; }
}
关于c# - 如何将附加属性绑定(bind)到ComboBox的DisplayMemberPath?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19693384/