2

アプリの一部に月表示のカレンダー インターフェイスがありますが、アイテムの選択に問題があります。インターフェイスはListBox、Outlook の月表示と同様に、ビューの各日にアイテムが含まれるように設定されています。私が経験している問題は、すべてのListBoxes で 1 つの項目の選択を維持する必要があることです。

以下は、私の状況を適切に説明するサンプルです。ListBox両方のesの間で単一の選択を維持する必要があります。

<Window x:Class="StackOverflow.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <ListBox ItemsSource="{Binding Numbers}"
                 SelectedItem="{Binding SelectedObject"/>
        <ListBox Grid.Column="1" ItemsSource="{Binding Dates}"
                 SelectedItem="{Binding SelectedObject"/>
    </Grid>
</Window>

ウィンドウのビュー モデル:

class MainWindowViewModel : DependencyObject
{
    public static readonly DependencyProperty SelectedObjectProperty =
        DependencyProperty.Register("SelectedObject", typeof(object),
                                    typeof(MainWindowViewModel),
                                    new UIPropertyMetadata(null));

    public ObservableCollection<int> Numbers { get; set; }
    public ObservableCollection<DateTime> Dates { get; set; }
    public object SelectedObject
    {
        get { return GetValue(SelectedObjectProperty); }
        set { SetValue(SelectedObjectProperty, value); }
    }
}

このプリミティブな例では、ビュー モデルの SelectedObject プロパティが 1 にないアイテムに設定されるとListBox、その で選択が削除されると予想されますが、そうはなりListBoxません。各 ListBox に名前を付けるだけで、SelectionChanged イベントにフックできることを理解しています。月全体のカレンダーでそれを行う必要はありません。もっと良い方法があるはずです。

アプリの以前の反復では、選択を維持するために使用される添付プロパティを使用して、SelectionManager 静的クラスを作成できました。ただし、アイテムに使用しているクラスは s ではないため、これを使用することはできません。アーキテクチャがかなり複雑になるため、ラッパー クラスDependencyObjectを作成する必要はありません。DependencyObject

ありがとう。

編集 1: 要求に応じてビュー モデル クラスを追加しました。

4

3 に答える 3

1

ListBoxes両方を同じコレクションにバインドし (DatesAndNumberオブジェクトの監視可能なコレクションまたはそれらの行に沿って何かを作成します)、コンバーターやデータ テンプレートを使用して目的の出力を取得します。IsSynchronizedWithCurrentItem次に、両方を true に設定するだけでListBoxes、目的の効果が得られます。参照: http://msdn.microsoft.com/en-us/library/system.windows.controls.primitives.selector.issynchronizedwithcurrentitem.aspx

于 2012-09-21T03:34:16.137 に答える
0

ICollectionView とそれに関連付けられたフィルターを使用するのはどうですか?

ここにそれをよりよく説明するリンクがあります

http://marlongrech.wordpress.com/2008/11/22/icollectionview-explained/

于 2012-09-22T04:21:44.483 に答える
0

別のセレクション マネージャー クラスと ISelectable インターフェイスを作成することで解決しました。CodeProjectで詳細を読むことができます。

于 2012-10-08T12:50:32.477 に答える