我的wpf应用程序中有一个值转换器,导致随机崩溃的构建。有时,应用程序正在运行,而完全更改其他内容并重建项目会使整个应用程序停止工作,并抛出
方法或操作未实现
如果我删除值转换器,则该应用程序每次都能正常运行。为了使其能够正常工作,有时我不得不多次清理和重建解决方案(或者从XAML中删除转换器并进行构建,然后再将其重新添加并再次构建,有时也可以)。
最让我困扰的是,它有时会工作,并且毫无理由地在重建后就停止工作。
这是我的XAML
<Window x:Class="Common.Cleanup.Views.CleanupView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:converters="clr-namespace:Common.Cleanup.Converters"
xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
xmlns:cal="http://www.caliburnproject.org"
mc:Ignorable="d">
<Window.Resources>
<converters:IconTypeConverter x:Key="IconConverter" />
</Window.Resources>
...
<TreeView x:Name="CleanItems" Grid.Row="1" Grid.Column="1" ItemsSource="{Binding CleanupItemList}" >
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<Setter Property="Focusable" Value="false" />
</Style>
</TreeView.ItemContainerStyle>
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding Items}">
<StackPanel Orientation="Horizontal">
<Image Margin="0,0,3,0" MinWidth="16" MinHeight="16" Source="{Binding Path=IconType, Converter={StaticResource IconConverter}}" />
<CheckBox IsChecked="{Binding IsChecked}" />
<TextBlock Text="{Binding Name}" Margin="3,0,0,0" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
...
</Window>
和我的转换器:
public class IconTypeConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var iconType = (IconType)value;
switch (iconType)
{
case IconType.View:
return FileUtility.GetBitmapImage("Shared/Icons/views.ico");
case IconType.Schedule:
return FileUtility.GetBitmapImage("Shared/Icons/schedules.ico");
case IconType.Sheet:
return FileUtility.GetBitmapImage("Shared/Icons/sheets.ico");
case IconType.Link:
return FileUtility.GetBitmapImage("Shared/Icons/links.ico");
}
return null;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// This is not the issue. I've tried to return null without any differene
throw new NotImplementedException();
}
}
我正在使用x64平台的Debug配置来构建项目。
答案 0 :(得分:0)
在图像绑定中添加Mode=OneWay
,情况会变得更好。
赞:
<Image Margin="0,0,3,0" MinWidth="16" MinHeight="16"
Source="{Binding Path=IconType, Converter={StaticResource IconConverter}, Mode=OneWay}" />
这是因为在转换器的ConvertBack
函数中,您已要求它引发异常。因此,每当它尝试使用UI元素的更改后的值来更新源时,都会调用ConvertBack
函数,并引发您所看到的异常。
我刚刚在ConvertBack
函数中看到了您的评论。我仍然建议您尝试一下我的答案。另外,请尝试返回NotSupportedException
而不是返回NotImplementedException
或null,以查看错误消息是否更改。