0

チェックボックス、テキスト、およびサムネイルを含む複雑なコンボボックスが必要です。複雑なコンボボックスを構築する際に大いに役立った次のリンクをすでに見ました。

http://blogs.microsoft.co.il/blogs/justguy/archive/2009/01/19/wpf-combobox-with-checkboxes-as-items-it-will-even-update-on-the-fly. aspx

チェックボックス付きの WPF ComboBox を探しています

しかし、アプリケーションでこれらの複雑なユーザー コントロールを使用する方法が見つかりません。私は WPF を初めて使用するので、あらゆる種類のデモンストレーション サポートをいただければ幸いです。

ディーン、以前のSO投稿で言及された次の例を使用して、コードビハインドファイルにバインドする方法の解決策を探していました。

<ComboBox.ItemTemplate>
<DataTemplate>
    <StackPanel Orientation="Horizontal">
        <CheckBox IsChecked="{Binding IsSelected}"
                   Width="20" />
        <TextBlock Text="{Binding DayOfWeek}"
                   Width="100" />
    </StackPanel>
</DataTemplate>

問題は、チェックボックスとタイトルのリストをこのコンボボックス テンプレートにバインドするには、DataTable などの何かが必要ですか? 前もって感謝します

4

3 に答える 3

3

Combobox は ItemsControl です。すべての ItemsControls は、項目またはコンテナーで「ハードコーディング」することができます。

これにより、コンボボックスに新しいエントリが追加され、文字列が ComboBoxItem である ItemsContainer にラップされます。

<ComboBox>
    <sys:string>Hello</string>
<ComboBox>

ここでは、コンボボックス項目を直接作成し、その内容を値「Hello」の文字列に追加します。

<ComboBox>
    <ComboBoxItem Content="Hello"/>
<ComboBox>

どちらも視覚的には同じに見えます。最初のケースでは、ComboBox が ComboBox の未知の型の文字列を ComboBoxItem にラップし、デフォルトの DataTemplate を使用して表示することを理解することが重要です。デフォルトの DataTemplate は TextBlock を表示し、指定されたデータ項目で ToString() を呼び出します。

動的データを取得するには、データ項目を含む ObservableCollection が必要です。

    class Employee
    {
        public BitmapSource Picture {get;set;}
        public string Name{get;set}
    }

ObservableCollection<Employee> employees;
myComboBox.ItemsSource = employees;

多くのデータ項目を保持する観測可能なコレクションである Employee という DataClass があり、このコレクションを ItemsSource として設定します。この時点から、コンボボックスはこのコレクションへの変更をリッスンします。従業員の追加と削除と同様に、新しい従業員を ComboBoxItem に自動的にラップします。すべてが自動的に行われます。必要なのは、適切な DataTemplate を提供することだけです。コンボボックスは、従業員を「表示」する方法を認識していません。まさにそれが DataTemplate の目的です。

<DataTemplate x:Key="employeeTemplate">
    <StackPanel Orientation="Horizontal">
        <Image Source="{Binding Picture}"/>
        <TextBlock Text="{Binding Name}"/>
    </StackPanel>
</DataTemplate>

従業員は ComboBoxItem にラップされており、ComboBoxItem は提供された Datatemplate を使用してそのデータを表示します。つまり、DataTemplate 内で Binding を使用してデータ項目のすべてのプロパティにアクセスできます。

お役に立てば幸いです。

于 2012-05-31T10:43:07.640 に答える
0

アイテムを直接追加するだけです

<ComboBox>
    <ComboBox.Items>
        <ComboBoxItem>
            <TextBlock Text="test text" />
        </ComboBoxItem>
        <ComboBoxItem>
            <CheckBox Content="test checkbox" />
        </ComboBoxItem>
        <ComboBoxItem>
            <Button Content="test button" />
        </ComboBoxItem>
    </ComboBox.Items>
</ComboBox>

または、ItemsSource を使用する場合は、DataTemplateSelector が必要になります。

<ComboBox>
    <ComboBox.ItemTemplateSelector>
        <local:MyCustomTemplateSelector />
    </ComboBox.ItemTemplateSelector>
</ComboBox>

ここに DataTemplateSelectors を説明するリンクがあります

http://msdn.microsoft.com/en-us/library/system.windows.controls.itemscontrol.itemtemplateselector.aspx

于 2012-05-31T10:19:15.013 に答える