在UserControl中绑定

时间:2015-05-29 21:47:46

标签: c# .net wpf xaml

我有一个UserControl,它有一个Image和一个Textblock,如下所示:

<Image Stretch="UniformToFill" Source="{Binding Path=ImageURL}"/>
<TextBlock Text="{Binding Path=Title}"/>

在用户控件的.cs中,我有依赖属性来进行绑定:

    public string Title
    {
        get { return (string)GetValue(TitleProperty); }
        set { SetValue(TitleProperty, value); }
    }

    public static readonly DependencyProperty TitleProperty =
        DependencyProperty.Register("Title", typeof(string), typeof(MyUserControl), null);

    public string ImageURL
    {
        get { return (string)GetValue(ImageURLProperty); }
        set { SetValue(ImageURLProperty, value); }
    }

    public static readonly DependencyProperty ImageURLProperty =
        DependencyProperty.Register("ImageURL", typeof(string), typeof(MyUserControl), null);

    public MyUserControl()
    {
        this.InitializeComponent();
        (this.Content as FrameworkElement).DataContext = this;
    }

在我的MainPage.xaml中,我在列表中调用它

<ListView Grid.Row="1"
          HorizontalAlignment="Center"
          Name="ControlsListView">
    <ListView.ItemTemplate>
        <DataTemplate>
            <controls:MyUserControl Margin="20"
                                  Title="{Binding Title}" //works
                                  ImageURL="{Binding ImageURL}"/> //doesn't work
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

然后我从Json.net获取此数据并将其提供给ListView的ItemsSource。它适用于标题,但ImageURL没有,任何人都可以帮助我为什么?

3 个答案:

答案 0 :(得分:0)

可能是错误的DataContext,请参阅ReSharper WPF error: "Cannot resolve symbol "MyVariable" due to unknown DataContext"。答案描述了如何使用免费的Snoop实用程序来检测运行时绑定错误。

答案 1 :(得分:0)

默认情况下,UserControl的DataContext未设置为指向后面的代码。

添加:

<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}">

答案 2 :(得分:0)

也许ImageUrl中的反斜杠让人感到困惑。

您使用的是什么ImageUrl? Json可能将反斜杠解释为转义字符,您可能必须使用双反斜杠对ImageUrl进行编码。