gpt4 book ai didi

.net - 类型 'System.Windows.Data.Binding' 的对象无法转换为类型 'System.String'

转载 作者:行者123 更新时间:2023-12-02 06:42:34 27 4
gpt4 key购买 nike

不知道有没有人可以帮忙。我已经在这个问题上敲了半天了,我一定是做错了什么。我有一个带有许多依赖属性的自定义控件。

    [TemplatePart(Name = InformationBubble.InformationBubbleTitlePart, Type = typeof(TextBlock))]
[TemplatePart(Name = InformationBubble.InformationBubbleProductImagePart, Type=typeof(Image))]

public class InformationBubble : Control
{
#region Template Parts Name Constants

/// <summary>
/// Name constant for the Information Bubble Title Part
/// </summary>
public const string InformationBubbleTitlePart = "InformationBubbleTitleText";

/// <summary>
/// Name constant for the Information Bubble Product Image Part
/// </summary>
public const string InformationBubbleProductImagePart = "InformationBubbleProductImage";

#endregion

#region TemplateParts

private TextBlock _Title;

internal TextBlock Title
{
get { return _Title; }
private set
{
_Title = value;

if (_Title != null)
{
_Title.Text = this.ProductTitleText;
}
}
}

private Image _ProductImage;

internal Image ProductImage
{
get { return _ProductImage; }
private set
{
_ProductImage = value;

if (_ProductImage != null)
{
_ProductImage.Source = this.ProductImageSource;
}
}
}

#endregion

#region Public String Product Title

// Dependency properties declaration
public static readonly DependencyProperty ProductTitleProperty = DependencyProperty.Register(
"ProductTitle",
typeof(string),
typeof(InformationBubble),
new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnProductTitleChanged)));

public static void OnProductTitleChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
InformationBubble iBubble = sender as InformationBubble;

if (iBubble.Title != null)
{
iBubble.Title.Text = e.NewValue as string;
}
}

public string ProductTitleText
{
get { return GetValue(ProductTitleProperty) as string; }
set { SetValue(ProductTitleProperty, value); }
}

#endregion

#region Public Image Source Product Image

public static readonly DependencyProperty ProductImageSourceProperty = DependencyProperty.Register(
"ProductImageSource",
typeof(ImageSource),
typeof(InformationBubble),
new PropertyMetadata(null, new PropertyChangedCallback(OnProductImageSourceChanged)));

public static void OnProductImageSourceChanged(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
InformationBubble iBubble = sender as InformationBubble;

if (iBubble.ProductImage != null)
{
iBubble.ProductImage.Source = e.NewValue as ImageSource;
}
}

public ImageSource ProductImageSource
{
get { return GetValue(ProductImageSourceProperty) as ImageSource; }
set { SetValue(ProductImageSourceProperty, value); }
}

#endregion

public InformationBubble()
{
this.DefaultStyleKey = typeof(InformationBubble);
}

#region Overrides

public override void OnApplyTemplate()
{
base.OnApplyTemplate();

Title = GetTemplateChild(InformationBubble.InformationBubbleTitlePart) as TextBlock;
ProductImage = GetTemplateChild(InformationBubble.InformationBubbleProductImagePart) as Image;
}

#endregion

#region Private Methods

private void GoToState(string stateName, bool useTransitions)
{
VisualStateManager.GoToState(this, stateName, useTransitions);
}

#endregion
}

现在,如果我在 xaml 中的某处使用此控件,如果我这样做,它就会起作用:

<controls:InformationBubble 
ProductImageSource="{Binding SelectedItem.NormalImageSource}"
ProductTitleText="Test Title"
"/>

但是,如果我尝试将产品标题文本数据绑定(bind)到 ViewModel 中 SelectedItem 对象的 title 属性:

<controls:InformationBubble 
ProductImageSource="{Binding SelectedItem.NormalImageSource}"
ProductTitleText="{Binding SelectedItem.Title, Mode=TwoWay"
"/>

我得到“System.Windows.Data.Binding”类型的对象无法转换为“System.String”类型。 TextBlock 的文本属性是 DependencyProperty,所​​以我一定在这里遗漏了一些明显的东西。

最佳答案

难道是属性名称写错了。下面代码中的“ProductTitle”应该是“ProductTitleText”吗?

public static readonly DependencyProperty ProductTitleProperty = DependencyProperty.Register(
"ProductTitle", // "ProductTitleText" ?
typeof(string),
typeof(InformationBubble),
new PropertyMetadata(string.Empty, new PropertyChangedCallback(OnProductTitleChanged)));

我想象当您使用字符串常量时,WPF 使用反射直接访问属性“public string ProductTitleText”。 DependencyProperty 将被忽略,因为属性名称不匹配(“ProductTitle”与“ProductTitleText”)。

因此,对于标题,您有一个名为“ProductTitle”的依赖属性和一个名为“ProductTitleText”的(字符串)属性。对于 ProductImage,您有一个名为“ProductImageSource”的依赖属性和一个也称为“ProductImageSource”的属性(ImageSource 类型)。

有意义吗?

关于.net - 类型 'System.Windows.Data.Binding' 的对象无法转换为类型 'System.String',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6100222/

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