c# - WPF XAML 中不受控制的异常:指定的转换无效
问题描述
我有一个 MVVM WPF 应用程序。我有以下转换器:
public class PrintIconVisibilityValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (values[0] == null || values[1] == null) return Visibility.Collapsed;
int item1 = (int)values[0];
string item2 = (string)values[1];
if (item1 > 0 || !string.IsNullOrEmpty(item2))
{
return Visibility.Visible;
}
else
{
return Visibility.Collapsed;
}
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
在我看来,我这样做:
<Window.Resources>
<classes:PrintIconVisibilityValueConverter x:Key="PrintIconVisibilityValueConverter"/>
</Window.Resources>
然后我在这个视图中有一个图像:
<Image Source="/MyImages;component/Images/PrintIco.png"
Height="15" Margin="20 0 5 0">
<Image.Visibility>
<MultiBinding Converter="{StaticResource PrintIconVisibilityValueConverter}">
<Binding Path="Item1" />
<Binding Path="Item2" />
</MultiBinding>
</Image.Visibility>
</Image>
Item1 和 Item2 是视图模型中的公共属性:
private string _item2 = string.Empty;
public string Item2
{
get
{
return _item2;
}
set
{
if (_item2 == value) return;
_item2 = value;
OnPropertyChanged("Item2");
}
}
private int _item1;
public int Item1
{
get
{
return _item1;
}
set
{
if (_item1 == value) return;
_item1 = value;
OnPropertyChanged("Item1");
}
}
它编译正确,我可以毫无问题地执行应用程序,但在设计时,视图不显示,错误显示不受控制的异常并指向该行:
int item1 = (int)values[0];
在 PrintIconVisibilityValueConverter 类中。
在视图中显示的异常屏幕截图下方:
解决方案
一些建议;
调用GetIsInDesignMode
转换器中的方法并在返回时立即返回true
:
public class PrintIconVisibilityValueConverter : IMultiValueConverter
{
public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
{
if (DesignerProperties.GetIsInDesignMode(new DependencyObject()))
return Visibility.Visible;
...
}
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
DataContext
在 XAML 中设置:
<Window.DataContext>
<local:ViewModel />
</Window.DataContext>
设置设计时数据上下文:
<Window ... d:DataContext ="{d:DesignInstance {x:Type local:ViewModel}, IsDesignTimeCreatable=True}">
推荐阅读
- powershell - 将大型 PBI 报告导入组工作区时出现 New-PowerBIReport 错误:“任务已取消。”
- docker - 错误无法将图像'library/web:latest'推送到注册表'docker.io'。错误:被拒绝:请求的资源访问被拒绝 - Kompose up
- angularjs - Linux 的角度错误
- java - Spring Boot + Java:来自 JSON 数据的基于关键字的搜索
- c# - 在 Visual Studio 2019 C# 应用程序中使用 SQL Server 2019 中的 mdf 文件
- python - 具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all() 处理等号问题
- email - 如何在发送电子邮件之前通过 vbscript 设置回复
- javascript - Material UI 和 Bootstrap 可以一起使用吗?
- ssis - 服务器抛出异常。(来自 HRESULT 的异常:0x80010105 (RPC_E_SERVERFAULT))”。(Microsoft.DataTransformationServices.VsIntegration)
- asp.net-mvc - MySqlException:已经有一个打开的 DataReader 与此 Connection 关联,必须先关闭