带静态项的XAML资源?

时间:2011-10-06 21:26:15

标签: xaml resources static singleton observablecollection

<Window.Resource>
    <ResourceDictionary>
        <local:SomeResourceWithObsCollection x:Key="MyItemWithCollection">
            <local:SomeClass.Instance /> <!-- THIS DOES NOT WORK -->
        </local:SomeResourceWithObsCollection>
    </ResourceDictionary>
</Window.Resources>

我不知道如何让这条线工作......我尝试过做<x:Static SomeClass.Instance />,但这也是不允许的。

[ContentProperty("TheItems")]
public class SomeResourceWithObsCollection
{
    public class SomeResourceWithObsCollection()
    {
        TheItems = new ObservableCollection<IMyInterface>();
    }

    public ObservableCollection<IMyInterface> TheItems { get; set; }
}

public class SomeClass : IMyInterface
{
    private static SomeClass _instance = new SomeClass();

    private SomeClass() { }

    public SomeClass Instance { get { return _instance; } }
}

2 个答案:

答案 0 :(得分:2)

您现在无法在XAML中执行您要求执行的操作。也许未来版本的XAML会解释这一点。你必须在后面的代码中执行它,这是一个例子:

Adding a static object to a resource dictionary

答案 1 :(得分:1)

我能建议的最接近的是CompositeCollection和使用ListBoxItems(或其他等效物)的组合来包装静态内容(因为我相信你只能使用静态内容将静态内容拉入XAML) {x:Static}标记扩展名)

这可以在XAML中使用,如下所示:

<ListBox>
    <ListBox.ItemsSource>
        <CompositeCollection>
            <ListBoxItem Content="{x:Static local:Example.One}" />
            <ListBoxItem Content="{x:Static local:Example.Two}" />
        </CompositeCollection>
    </ListBox.ItemsSource>
</ListBox>