gpt4 book ai didi

c# - 自定义控件中的 WPF 数据绑定(bind)

转载 作者:太空宇宙 更新时间:2023-11-03 16:30:09 25 4
gpt4 key购买 nike

我正在尝试创建一个动态添加到 WPF 窗口中定义的 TabControl 的自定义 TabItem。我的自定义控件有一个对象,其中包含我想绑定(bind)到模板特定部分的数据。

<Style TargetType="{x:Type local:EntityTabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:EntityTabItem}">
<Border>
<Grid>
<Border x:Name="borderTop" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"/>
<StackPanel Orientation="Horizontal" Margin="0,0,2,0">
<!-- Want to bind the FileName to this TextBlock -->
<TextBlock VerticalAlignment="Center" Text="{Binding Path=Entity.FileName}" Margin="-1,0,0,0" Padding="6,1,10,1"/>
<Button x:Name="closeButton" VerticalAlignment="Center" Content="X" Style="{StaticResource TabCloseButton}"/>
</StackPanel>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Background="White">
<!-- Want to bind the FileText to this TextBox -->
<TextBox Margin="15,0,0,0" BorderBrush="{x:Null}" Text="{Binding Path=Entity.FileText}"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>

这是自定义控件 CS 文件:

public class EntityTabItem : TabItem
{
public Entity MyEntity { get; set; }

public EntityTabItem(string path)
{
this.MyEntity = new Entity(path);
}

static EntityTabItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(EntityTabItem), new FrameworkPropertyMetadata(typeof(EntityTabItem)));
}
}

我相当确定我需要在某处设置 DataBinding/Source,但我无法弄清楚将它绑定(bind)到哪里才能使我的 TextBlock 中的绑定(bind)正常工作。

老实说,我根本无法理解 DataBinding。有一半的时间,我在没有意识到它是如何工作的情况下让它工作得很好,而另一半的时间它什么也没做。

我还尝试将“实体”对象实现为 DependencyProperty,但也无法使其正常工作。因为我只是在 CS 中创建我的自定义 TabItem(从未直接在 XAML 中使用),这有关系吗?

最佳答案

尝试使用 DataContext 属性,例如:

<Style TargetType="{x:Type local:EntityTabItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type local:EntityTabItem}">
<Border>
<Grid>
<Border x:Name="borderTop" Background="{TemplateBinding Background}" BorderBrush="{TemplateBinding BorderBrush}"/>
<StackPanel Orientation="Horizontal" Margin="0,0,2,0">
<!-- Want to bind the FileName to this TextBlock -->
<TextBlock VerticalAlignment="Center" Text="{Binding Path=FileName}" Margin="-1,0,0,0" Padding="6,1,10,1"/>
<Button x:Name="closeButton" VerticalAlignment="Center" Content="X" Style="{StaticResource TabCloseButton}"/>
</StackPanel>
</Grid>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="ContentTemplate">
<Setter.Value>
<DataTemplate>
<Grid Background="White">
<!-- Want to bind the FileText to this TextBox -->
<TextBox Margin="15,0,0,0" BorderBrush="{x:Null}" Text="{Binding Path=FileText}"/>
</Grid>
</DataTemplate>
</Setter.Value>
</Setter>
</Style>


public class EntityTabItem : TabItem
{
private Entity _myEntity;

public Entity MyEntity
{
get { return _myEntity; }
set
{
_myEntity = value;
DataContext = value;
}
}

public EntityTabItem(string path)
{
this.MyEntity = new Entity(path);
}

static EntityTabItem()
{
DefaultStyleKeyProperty.OverrideMetadata(typeof(EntityTabItem), new FrameworkPropertyMetadata(typeof(EntityTabItem)));
}
}

关于c# - 自定义控件中的 WPF 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11109632/

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