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- Concentrator オブジェクトのリスト。

したがって、アプリケーションでは、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 に答える