WPF Image绑定中碰到的事
在做WPF的Demo时,碰到这样的问题,现在将它记录下来,以供需要时查阅。
在Demo中用到Image控件绑定数据时,走正常绑定流程没出现什么问题,但在程序中用代码去设置这个Image的Source时会自动取消绑定,下次走正常绑定流程会失效 如下图代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
if (string.IsNullOrEmpty(sourceFileName) == false)
{
txtPluginIcoPath.Text = sourceFileName;
BitmapImage tempImage = new BitmapImage();
tempImage.BeginInit();
tempImage.StreamSource = File.Open(sourceFileName, FileMode.Open);
tempImage.EndInit();
imageIco.Source = tempImage;
}
{
txtPluginIcoPath.Text = sourceFileName;
BitmapImage tempImage = new BitmapImage();
tempImage.BeginInit();
tempImage.StreamSource = File.Open(sourceFileName, FileMode.Open);
tempImage.EndInit();
imageIco.Source = tempImage;
}
刚开始出现这样问题的时候,莫名其妙,也许是WPF知识掌握的还不够,后来经过调试时发现,经过上面代码的设置Source后绑定事件一直没进去,发现可能是绑定被取消了,然后加上如下代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
DependencyProperty dp = Image.SourceProperty;
if (!BindingOperations.IsDataBound(imageIco, dp))
{//判断是否该控件存在绑定
Binding bingding = new Binding("IcoPath");
BindingOperations.SetBinding(imageIco, dp, bingding);
}
tempCanvas.DataContext = lboxPluginItems.SelectedItem;
if (!BindingOperations.IsDataBound(imageIco, dp))
{//判断是否该控件存在绑定
Binding bingding = new Binding("IcoPath");
BindingOperations.SetBinding(imageIco, dp, bingding);
}
tempCanvas.DataContext = lboxPluginItems.SelectedItem;
然后问题得到解决:绑定被取消后手动写代码给他重新绑定。
取消绑定代码:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
DependencyProperty textProp = TextBox.TextProperty;
if (BindingOperations.IsDataBound(textBox, textProp))
{
BindingOperations.ClearBinding(textBox, textProp);
}
if (BindingOperations.IsDataBound(textBox, textProp))
{
BindingOperations.ClearBinding(textBox, textProp);
}