4

コンボボックスにバインドしたい次のコレクションがあります。

public ObservableCollection<Parameter> Values
{ get; set; }

public class Parameter
{
    public String Text { get; set; }
    public String Value { get; set; }
}

コンボボックスの表示テキストを Parameter クラスの Text プロパティにバインドする必要があります。以下の方法を試しましたが、すべて役に立ちませんでした:

<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Parameter.Text"
<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Parameter\Text"
<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text"

上記の3つの方法を試してみると[アセンブリ名].Parameterが各パラメータのコンボボックスに表示されます。

上記の 2 つの方法では、コンボ ボックスに何も表示されません。

<ComboBox ItemsSource="{Binding Values, Path=Text}"
<ComboBox ItemsSource="{Binding Values, Path=Values.Text}"

そして、これは最初のパラメーターのテキストを受け取り、それを文字に分割し、各文字をコンボボックスの個別の項目として表示します。

<ComboBox ItemsSource="{Binding Values, Path=Values/Text}"

ここに画像の説明を入力

アップデート:

これは要求された完全な XAML コードです

<ListBox BorderBrush="{x:Null}" Grid.Column="0" Height="100" Grid.ColumnSpan="2" Grid.Row="1" ItemsSource="{Binding ItemParams}" ScrollViewer.VerticalScrollBarVisibility="Auto" Margin="2" HorizontalContentAlignment="Stretch">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Grid.ColumnDefinitions>
                    <ColumnDefinition Width="100" />
                    <ColumnDefinition Width="*" />
                </Grid.ColumnDefinitions>
                <TextBlock TextTrimming="CharacterEllipsis" Grid.Column="0" Margin="2" Text="{Binding Name}" Background="{Binding ElementName=cmbColors, Path=SelectedItem}"/>
                <ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text" SelectedIndex="0" HorizontalAlignment="Left" Grid.Column="1" Margin="2" Width="150" Name="cmbColors" >
                    <ComboBox.ItemTemplate>
                        <DataTemplate>
                            <TextBlock Grid.Column="1" Margin="2, 1" Text="{Binding}"/>
                        </DataTemplate>
                    </ComboBox.ItemTemplate>
                </ComboBox>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

パラメータ クラス:

public class Params
{
    public Params(String name, ObservableCollection<Parameter> values)
    {
        Name = name;
        Values = values;
    }

    public String Name
    { get; set; }

    public ObservableCollection<Parameter> Values
    { get; set; }
}
4

3 に答える 3

6

正しい定式化は、あなたがすでに言及したものの1つです:

<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text"

もう一度確認してください。うまくいかない場合は、そのままの XAML を投稿してください。

于 2012-06-29T07:38:48.660 に答える
4

直接行うことができます:

<ComboBox ItemsSource="{Binding Values}" DisplayMemberPath="Text" />

WPF の場合、ComboBox (ComboBoxItem) のすべての要素は T 型であるため、 Tのパブリック プロパティを検索します。これがTextを配置するだけで機能する理由です。

于 2012-06-29T07:39:06.827 に答える
0

コンボボックス項目のテンプレートまたはセットを単純に削除する必要がありましたText="{Binding Text}"

   <ComboBox.ItemTemplate> 
        <DataTemplate> 
            <TextBlock Grid.Column="1" Margin="2, 1" Text="{Binding}"/> 
        </DataTemplate> 
    </ComboBox.ItemTemplate> 
于 2012-06-29T08:13:13.260 に答える