gpt4 book ai didi

c# - 绑定(bind)动态资源

转载 作者:行者123 更新时间:2023-11-30 15:50:43 24 4
gpt4 key购买 nike

我正在尝试使用 MultiBinding 作为 ListBox 的 ItemsSource,并且我想将几个集合绑定(bind)到 MultiBinding。直到主机控件(Page 的派生)已经被实例化之后,集合才会被填充。在构建之后,我调用了一个方法来为页面设置一些数据,包括这些集合。

现在,我有这样的东西:

public void Setup()
{
var items = MyObject.GetWithID(backingData.ID); // executes a db query to populate collection
var relatedItems = OtherObject.GetWithID(backingData.ID);
}

我想在 XAML 中做这样的事情:

<Page ...

...

<ListBox>
<ListBox.ItemsSource>
<MultiBinding Converter="{StaticResource converter}">
<Binding Source="{somehow get items}"/>
<Binding Source="{somehow get relatedItems}"/>
</MultiBinding>
</ListBox.ItemsSource>
</ListBox>
...
</Page>

我知道我不能在绑定(bind)中使用 DynamicResource,那我该怎么办?

最佳答案

在我看来你真正想要的是 CompositeCollection并为您的页面设置 DataContext。

<Page x:Class="MyPage" DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Page.Resources>
<CollectionViewSource Source="{Binding Items}" x:Key="items" />
<CollectionViewSource Source="{Binding RelatedItems}" x:Key="relatedItems" />
</Page.Resources>

<ListBox>
<ListBox.ItemsSource>
<CompositeCollection>
<CollectionContainer
Collection="{StaticResource items}" />
<CollectionContainer
Collection="{StaticResource relatedItems}" />
</CompositeCollection>
</ListBox.ItemsSource>
</ListBox>
</Page>

背后的代码看起来像这样:

public class MyPage : Page
{
private void Setup()
{
Items = ...;
RelatedItems = ...;
}

public static readonly DependencyProperty ItemsProperty =
DependencyProperty.Register("Items", typeof(ReadOnlyCollection<data>), typeof(MyPage),new PropertyMetadata(false));
public ReadOnlyCollection<data> Items
{
get { return (ReadOnlyCollection<data>)this.GetValue(ItemsProperty ); }
set { this.SetValue(ItemsProperty , value); }
}

public static readonly DependencyProperty RelatedItemsProperty =
DependencyProperty.Register("RelatedItems", typeof(ReadOnlyCollection<data>), typeof(MyPage),new PropertyMetadata(false));
public ReadOnlyCollection<data> RelatedItems
{
get { return (ReadOnlyCollection<data>)this.GetValue(RelatedItemsProperty ); }
set { this.SetValue(RelatedItemsProperty , value); }
}
}

编辑:我记得 CollectionContainer 不参与逻辑树,因此您需要使用 CollectionViewSource 和 StaticResource。

关于c# - 绑定(bind)动态资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/262343/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com