WPF BindingExpression路径错误

时间:2016-02-25 09:48:34

标签: c# wpf binding binding-expressions

我的模型BaseModel的字段为IdCreatedDeletedName等。

从这个模型中我得到了模型CategoryBrand。模型Brand包含字段Image

此外,我还有Node课程(名称为姓名,价值为所有对象)

public class Node : INotifyPropertyChanged
{
    private string _title;
    private BaseModelDto _value;
    private bool _isSelected;

    #region ctor

    public Node(string title, BaseModelDto value)
    {
        Title = title;
        Value = value;
    }

    #endregion

    #region Properties

    public string Title
    {
        get { return _title; }
        set
        {
            _title = value;
            NotifyPropertyChanged("Title");
        }
    }

    public BaseModelDto Value
    {
        get { return _value; }
        set
        {
            _value = value;
            NotifyPropertyChanged("Value");
        }
    }

    public bool IsSelected
    {
        get { return _isSelected; }
        set
        {
            _isSelected = value;
            NotifyPropertyChanged("IsSelected");
        }
    }

    #endregion

    public event PropertyChangedEventHandler PropertyChanged;

    private void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

我将Node用于ComboBox。所以我有分类和品牌的ComboBox。原因类别和品牌是从BaseModel派生出来的,我使用的是同一个类Node

<ComboBox.ItemTemplate>中我想显示Image(如果存在)。所以我写了下一段代码:

<Image MaxHeight="30" Margin="15,0,0,0" HorizontalAlignment="Right" Name="ImageCheckBox" Grid.Column="1">
    <Image.Style>
        <Style TargetType="{x:Type Image}">
            <Setter Property="Source" Value="{Binding Value.Image.FileLocation, Converter={StaticResource ImagePathConverter}}" />
        </Style>
    </Image.Style>
</Image>

它有效,它只显示Brand个项目的图像,因为它们只有Image

但在输出窗口中我看到下一条消息:

  

System.Windows.Data错误:40:BindingExpression路径错误:'对象'''类别'(HashCode = 56044044)'上找不到'图像'属性。 BindingExpression:路径= Value.Image.FileLocation; DataItem ='Node'(HashCode = 65381042); target元素是'Image'(Name ='ImageCheckBox'); target属性是'Source'(类型'ImageSource')

正如我之前读到的,Binding中的任何异常都会影响WPF App的性能。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您可以将ItemTemplateSelector的{​​{1}}设置为以下内容:

ComboBox

在XAML中:

public class CategoryBrandItemTemplateSelector : DataTemplateSelector
{
    public DataTemplate CategoryItemTemplate { get; set; }
    public DataTemplate BrandItemTemplate { get; set; }

    public override DataTemplate SelectTemplate(object item, DependencyObject container)
    {
        if(item is Category)
            return CategoryItemTemplate;

        if(item is Brand)
            return BrandItemTemplate;

        return base.SelectTemplate(item, container);
    }
}

其中<ComboBox> <ComboBox.ItemTemplateSelector> <local:CategoryBrandItemTemplateSelector BrandItemTemplate="{StaticResource BrandTemplate}" CategoryItemTemplate="{StaticResource CategoryTemplate}" /> </ComboBox.ItemTemplateSelector> </ComboBox> 是在某处声明的BrandTemplate资源(这与您现在用作DataTemplate的资源相同),而ItemTemplate将是没有资源的CategoryTemplate Image和失败的绑定。