与.png绑定的Silverlight图像不起作用

时间:2013-05-17 02:15:16

标签: image binding png silverlight-5.0

我在论坛中仔细检查了这一点,但我没有找到解决方案。

这很完美:

 <Image Margin="0,0,0,0" Stretch="UniformToFill" Source="http://localhost:5313/Images/1.png"    MaxHeight="140" MinHeight="155" VerticalAlignment="Top"/>

为什么这不起作用:

<Image Margin="0,0,0,0" Stretch="UniformToFill" Source="{Binding ImagenSeleccionada}"    MaxHeight="140" MinHeight="155" VerticalAlignment="Top"/>

背后的代码。

    private string _imagenSeleccionada;
    public string ImagenSeleccionada
    {
        get
        {
            return this._imagenSeleccionada;
        }
        set
        {
            if (this._imagenSeleccionada == value)
                return;

            this._imagenSeleccionada = value;
        }
    }

主页

控制

                         ItemsSource =“{Binding FilteredTemperatureReports}”UseLayoutRounding =“False”                          RowHeight =“20”Horizo​​ntalAlignment =“Stretch”VerticalAlignment =“Stretch”SelectionMode =“Single”                          Horizo​​ntalGridLinesBrush =“透明”VerticalGridLinesBrush =“透明”                          Background =“{x:Null}”BorderBrush =“{x:Null}”                          IsFilteringAllowed =“False”RowIndicatorVisibility =“Collapsed”                          CanUserFreezeColumns =“False”ShowGroupPanel =“False”                          HeaderRowStyle =“{StaticResource GridViewHeaderRowStyle}”                          GroupRowStyle =“{StaticResource GridViewGroupRowStyle}”                          RowStyle =“{StaticResource GridViewRowStyle}”&gt;     

    <telerik:GridViewDataColumn Width="150" DataMemberBinding="{Binding Medio}" IsReadOnly="True" Header="Medio" 
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyleFirst}"
                                                CellStyle="{StaticResource GridViewCellStyle}" />
    <telerik:GridViewDataColumn Width="80" DataMemberBinding="{Binding TimeStamp}" IsReadOnly="True" Header="Fecha" DataFormatString="{} {0:dd/MM/yyyy}"  
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyle}"
                                                CellStyle="{StaticResource GridViewCellStyle}"/>
    <telerik:GridViewDataColumn Width="200" DataMemberBinding="{Binding Producto}" IsReadOnly="True" Header="Producto" 
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyle}"
                                                CellStyle="{StaticResource GridViewCellStyle}"/>
    <telerik:GridViewDataColumn Width="180" DataMemberBinding="{Binding Version}" IsReadOnly="True" Header="Version" 
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyle}"
                                                CellStyle="{StaticResource GridViewCellStyle}"/>
    <telerik:GridViewDataColumn Width="80" DataMemberBinding="{Binding Inversion}" IsReadOnly="True" Header="Inversion" DataFormatString="{}{0:C}" 
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyle}"
                                                CellStyle="{StaticResource GridViewCellStyle}"/>
    <telerik:GridViewDataColumn Width="80" DataMemberBinding="{Binding Ytd}" IsReadOnly="True" Header="YTD" DataFormatString="{}{0:C}" 
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyle}"
                                                CellStyle="{StaticResource GridViewCellStyle}"/>
    <telerik:GridViewColumn Width="80" IsReadOnly="True" Header="Product" 
                                                HeaderCellStyle="{StaticResource GridViewHeaderCellStyle}" 
                                                CellStyle="{StaticResource GridViewCellStyle}" >

The Code Behin the Grid。

void OnGridViewSelectionChanged(object sender, Telerik.Windows.Controls.SelectionChangeEventArgs e)
{
    var grid = sender as RadGridView;
    if (grid.SelectedItem != null)
    {
        grid.ScrollIntoView(grid.SelectedItem);
            var _internetDataViewModel = this.DataContext as InternetDataViewModel;
            _internetDataViewModel.ImagenSeleccionada = ((ExecutiveDashboard.TemperatureData)(grid.SelectedItem)).Image;
    }
}

什么不行?

Thnaks

1 个答案:

答案 0 :(得分:0)

{Binding}不会自动知道找到ImagenSeleccionada的位置。

您需要将其链接到特定元素,通常是名为的用户控件:

<UserControl x:Name="ThisCtrl" .... >
    <Image Source="{Binding ImagenSeleccionada, ElementName=ThisCtrl}" ... />

或明确将用户控件的DataContext设置为自身;然后DataContext将传播到用户控件子项:

<UserControl DataContext="{Binding RelativeSource={RelativeSource Self}}" ... >
    <Image Source="{Binding ImagenSeleccionada}" ... />

(或者您可以在代码隐藏构造函数中将DataContext设置为this

或者您可以将图像绑定的相对来源设置为用户控件的祖先,最好是通过其类型:

<UserControl ...>
    <Image Source="{Binding ImagenSeleccionada,
           RelativeSource={RelativeSource AncestorType=local:YourUserControlType}}" ... />