gpt4 book ai didi

c# - WPF 将数据源传递给用户控件

转载 作者:太空宇宙 更新时间:2023-11-03 12:24:55 24 4
gpt4 key购买 nike

我有一个非常简单的用户控件:

<UserControl x:Class="PointOfSale.UserControls.HousesGrid"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">

<ItemsControl x:Name="LayoutRoot" ItemsSource ="{Binding PopularHouses}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Columns="5"/>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>

<ItemsControl.ItemTemplate>
<DataTemplate>
<ToggleButton
Content="{Binding FormattedPanelTimeRemaining}"
Style="{StaticResource MetroToggleButtonStyle}"
Height="45"
Width="80"
VerticalAlignment="Center"/>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>

如您所见,ItemSource 属性绑定(bind)到父级 ViewModel 上的 PopularHouses 属性。这很好用。但是,我想要做的是将 LayoutRoot 元素的 ItemSource 设置为 XAML 中插入控件的父窗体上的不同属性。

最终结果应该是此用户控件的多个实例,绑定(bind)到父级数据上下文中的几个不同属性。

有人可以解释一下如何实现吗?

最佳答案

您只需使用 RelativeSource 将您的 UserControl 的 DataContext 绑定(bind)到第一个 ContentControl 的数据上下文。

 DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}"

我制作了以下示例:

主窗口 XAML

<Window x:Class="WpfDataContext.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:WpfDataContext"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding RelativeSource={RelativeSource Self}}">
<Grid>
<local:UserControl1/>
</Grid>
</Window>

为了这个示例,我们将其数据上下文设置为 Self。在代码隐藏中,我们定义了一个简单的属性来展示它是如何工作的:

public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}

public string SomeString { get; set; } = "Hello";
}

然后,用户控件 XAML:

<UserControl x:Class="WpfDataContext.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
DataContext="{Binding Path=DataContext, RelativeSource={RelativeSource AncestorType={x:Type ContentControl}}}">
<Grid>
<TextBlock Text="{Binding SomeString}"/>
</Grid>
</UserControl>

注意我们如何绑定(bind)它的 DataContext 属性,因为这是键。

为简单起见,我使用了文本 block ,但该原则也适用于您的情况

关于c# - WPF 将数据源传递给用户控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45487808/

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