1

我正在使用 WPF(4.5) 和 Caliburn.Micro。我试图了解如何让我的视图中的“事件”操纵我的视图中的其他控件。

例如:

我的视图有一个扩展器控件、一个按钮和一个 GridView。GridView 在 Expander 内。当用户单击按钮时,它会调用 VM 中的方法,该方法使用 BindableCollection<> 填充 gridview。我想要发生的是当该集合有超过 1 个项目时,我想自动展开扩展器控件。

想法?

4

2 回答 2

2

您可以绑定到集合中的项目数:

<Expander IsExpanded="{Binding Path=YourCollection.Length, Converter={StaticResource ResourceName=MyConverter}" />

然后在窗口或用户控件中:

<UserControl... xmlns:converters="clr-namespace:My.Namespace.With.Converters">
    <UserControl.Resources>
        <converters:ItemCountToBooleanConverter x:Key="MyConverter" />
    </UserControl.Resources>
</UserControl>

和转换器:

namespace My.Namespace.With.Converters {
    public class ItemCountToBooleanConverter : IValueConverter 
    {

        // implementation of IValueConverter here
        ...
    }
}

我是从脑海中写出来的,如果其中包含错误,请致歉;)

另外:确保您的 viewModel 实现了 INotifyPropertyChanged 接口,但我假设您已经知道这一点。

于 2013-05-30T18:40:54.547 回答
2

@cguedel 方法是完全有效的,但如果你不想使用转换器(为什么要多一个类),那么在你的视图模型中还有另一个类型的属性bool可能称为 ShouldExpand,那么为什么要说这么多,让我告诉你:

class YourViewModel {
    public bool ShouldExpand {
        get {
            return _theCollectionYouPopulatedTheGridWith.Length() != 0;
            // or maybe use a flag, you get the idea !
        }
    }

    public void ButtonPressed() {
        // populate the grid with collection
        // NOW RAISE PROPERTY CHANGED EVENT FOR THE ShouldExpand property
    }
}

现在在您的视图中使用此绑定:

<Expander IsExpanded="{Binding Path=ShouldExpand}" />

正如我之前所说,其他解决方案很好,但我喜欢减少我的解决方案中的类数量。这只是另一种方式。

于 2013-06-02T00:38:51.997 回答