1

我有一些 wpf 组合框(xaml):

<ComboBox ItemsSource="{Binding Path=NonPositionedConcentrators}"
          SelectedValue="{Binding Path=SelectedNonPositionedConcentrator}"
          DisplayMemberPath="SerialNumber" />

SelectedNonPositionedConcentrator- 是集中器类型。就像是:

class Concentrator
{
...
public string SerialNumber {...}
...
public override ToString{ return "Some needed text..."; }
}

NonPositionedConcentrators- 集中器对象列表。

因此,在应用程序中,我看到带有 NonPositionedConcentrators 序列号的组合框(因为DisplayMemberPath="SerialNumber"),但是当我选择某些东西时,选择"Some needed text..."的项目显示为 ,请参见图像:

在此处输入图像描述

我已经尝试过 SelectedValuePath="SerialNumber",但它不起作用......而且我无法删除它 - public override ToString{ return "Some needed text..."; },因为我需要......

4

3 回答 3

2

看起来您有一个可能导致您的问题的自定义 ComboBox 模板。如果它使用 TextBlock 或 ContentPresenter 来显示仅绑定 SelectedItem 属性而不拉入任何模板或其他设置的选定项目,那么无论如何您都只会获得 ToString 值。正确构建的模板将具有类似于默认模板在此位置使用的内容:

<ContentPresenter ContentTemplate="{TemplateBinding SelectionBoxItemTemplate}" ContentTemplateSelector="{TemplateBinding ItemTemplateSelector}"
    Content="{TemplateBinding SelectionBoxItem}" ContentStringFormat="{TemplateBinding SelectionBoxItemStringFormat}"
    HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" IsHitTestVisible="false" Margin="{TemplateBinding Padding}"
    SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
于 2013-01-30T13:37:26.987 回答
0

试试这个:

<ComboBox ItemsSource="{Binding Path=NonPositionedConcentrators}"
      SelectedItem="{Binding Path=SelectedNonPositionedConcentrator}"
      DisplayMemberPath="SerialNumber" />

编辑: 我已经复制了你的例子。我的集中器类:

public class Concentrator
{
    public string SerialNumber
    {
        get
        {
            return "123";
        }
    }
    public override string ToString()
    {
        return "Some needed text...";
    }
}

我的视图模型:

public class TestViewModel : ViewModelBase
{
    public ObservableCollection<Concentrator> NonPositionedConcentrators { get; set; }
    public Concentrator SelectedNonPositionedConcentrator { get; set; }
    public TestViewModel()
    {
        NonPositionedConcentrators = new ObservableCollection<Concentrator>();
        NonPositionedConcentrators.Add(new Concentrator());
        NonPositionedConcentrators.Add(new Concentrator());
        NonPositionedConcentrators.Add(new Concentrator());
    }
}

组合框:

    <ComboBox Height="23" Margin="25,12,103,0" Name="comboBox1" VerticalAlignment="Top" 
              ItemsSource="{Binding Path=NonPositionedConcentrators}"
              SelectedItem="{Binding Path=SelectedNonPositionedConcentrator}"
              SelectedValuePath="SerialNumber"
              DisplayMemberPath="SerialNumber" />

它对我来说很好用!

于 2013-01-30T12:01:50.920 回答
-1

您可以包含一个项目模板:

       <ComboBox.ItemTemplate>
            <DataTemplate>
                //your stuff
            </DataTemplate>
        </ComboBox.ItemTemplate>
于 2013-01-30T12:12:10.773 回答