无法在后面的代码中更改图像源

时间:2015-03-03 19:52:50

标签: c# wpf

我正在尝试更改代码中的Image.Source。 单击按钮时,Image.Source在后​​面的代码中被修改,并且它应该是 在Windows中显示图像。不幸的是,它似乎不起作用。 谁能让我知道问题是什么? 谢谢。

以下是我的代码:

XML

`<Grid Margin="0,0,-234,0">
        <Image Source="{Binding SourceName, Mode=TwoWay}" 
        Height="100" Width="100" Margin="201,69,661,151"/>
        <Button Margin="201,215,644,39" Click="Button_Click">show image</Button>
 </Grid>`

C#部分:

 private void Button_Click(object sender, RoutedEventArgs e)
    {
        Uri uri = new Uri(@"C:\localFTP\thisImage.jpg", UriKind.Absolute);

        BitmapImage i = new BitmapImage();
        i.BeginInit();
        i.UriSource = uri;
        i.EndInit();


        SourceName = i;
    }


    private ImageSource _sourceName;

    public ImageSource SourceName
    {
        get
        {
            return _sourceName;
        }
        set
        {
            _sourceName = value;
            OnPropertyChanged("SourceName");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged(string propertyName)
    {
        PropertyChangedEventHandler handler = PropertyChanged;

        if (handler != null)
        {
            handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }

1 个答案:

答案 0 :(得分:1)

您似乎无法在任何地方设置绑定源。

因此,要么设置MainWindow的DataContext,例如在像

这样的构造函数中
public MainWindow()
{
    InitializeComponent();   
    DataContext = this;
}

或明确指定绑定源,例如通过设置其RelativeSource:

<Image Source="{Binding SourceName,
                RelativeSource={RelativeSource AncestorType=Window}}"/>

作为注释,SourceName似乎是ImageSource类型属性的奇怪名称。最好将其命名为SourceImageSource

值得注意的是,创建BitmapImage实际上需要的代码少于您在问题中显示的代码:

private void Button_Click(object sender, RoutedEventArgs e)
{
    var uri = new Uri(@"C:\localFTP\thisImage.jpg");
    SourceName = new BitmapImage(uri);
}