2

我的应用程序的一部分有一个月视图日历界面,但我在选择项目时遇到了问题。界面的设置使得视图中的每一天都包含一个ListBox项目,很像 Outlook 中的月视图。ListBox我遇到的问题是我需要在所有es中维护单个项目选择。

下面是一个可以充分描述我的情况的示例。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 属性设置为不在 one 中的项目时,ListBox将在 that 中删除选择ListBox,但这不会发生。我知道我可以简单地命名每个 ListBox,并挂钩到 SelectionChanged 事件。我宁愿不必对整个月视图日历进行此操作。必须有更好的方法。

在应用程序的前一次迭代中,我能够创建一个带有用于维护选择的附加属性的 SelectionManager 静态类。但是,我现在不能使用它,因为我用于项目的类不是DependencyObjects,而且我真的不希望不必创建DependencyObject包装类,因为这会使我的体系结构相当复杂。

谢谢。

编辑 1: 根据要求添加了视图模型类。

4

3 回答 3

1

将两者绑定ListBoxes到同一个集合(创建一个可观察的DatesAndNumber对象集合或类似的东西)并使用转换器和/或数据模板来获得所需的输出。然后,您可以简单地将IsSynchronizedWithCurrentItem两者都设置为 trueListBoxes以获得所需的效果。参考: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 回答