Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF-转换器参数中的动态值_C#_Wpf_Ivalueconverter - Fatal编程技术网

C# WPF-转换器参数中的动态值

C# WPF-转换器参数中的动态值,c#,wpf,ivalueconverter,C#,Wpf,Ivalueconverter,用户界面中的复选框需要绑定到一个数值参数——实际上,某些值使复选框为“真”,否则为“假” 最简单的方法似乎是使用转换器: [ValueConversion(typeof(int), typeof(bool?))] public class TypeToBoolConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globaliz

用户界面中的复选框需要绑定到一个数值参数——实际上,某些值使复选框为“真”,否则为“假”

最简单的方法似乎是使用转换器:

[ValueConversion(typeof(int), typeof(bool?))]
public class TypeToBoolConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (targetType != typeof(bool?))
            throw new InvalidOperationException("The target must be a bool");

        if( (value < 3)
        {
            return true;
        }
        return false;
    }

    public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        throw new NotImplmentedExpection();
    }
}
[ValueConversion(typeof(int)、typeof(bool?)]
公共类TypeToBoolConverter:IValueConverter
{
公共对象转换(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
if(targetType!=typeof(bool?)
抛出新的InvalidOperationException(“目标必须是bool”);
如果((值<3)
{
返回true;
}
返回false;
}
公共对象转换回(对象值、类型targetType、对象参数、System.Globalization.CultureInfo区域性)
{
抛出新的NotImplementedExpection();
}
}
然后在XAML中:

<CheckBox IsChecked="{Binding Path=Type.TypeID, Converter={StaticResource TypeConverter}}" />

当使用Convert时,它就像一个符咒,但当使用ConvertBack时,它完全失败了,因为它需要知道数值是什么(取决于其他UI元素),然后才能知道返回什么数字-实际上它需要访问绑定对象

我假设我可以用ConverterParameter实现这一点,但从外观上看,您无法将值绑定到此属性

有办法摆脱这种混乱吗


编辑:我已经通过修改原始绑定解决了这个问题,并且没有被选中,因为在取消选中时,我只想删除该项。但我将保留该项,因为它似乎是一个有效的问题,我对可能的解决方案很好奇。

为什么不绑定到某个东西,并在绑定的内容中执行工作,例如viewmodel?它可能会更干净、更快


转换器在理论上是不错的,但是在构建了许多大型WPF项目之后,我几乎从未出于上述原因使用过它们。当然,你可以让它做你想做的事情,但有什么意义呢?你对这些转换发生的方式和时间的控制要少得多。

这有什么帮助吗?这一点很好,但在这种情况下,它会涉及到重大的不需要额外的努力。这背后的ViewModel包含许多直接使用的EF对象集合,而不是映射。要执行您的建议,需要我添加一些POCO和自动映射,然后添加所需的属性以在POCO中使用。这很公平。根据我的编辑,我在我的特定pro中找到了一种更简单的方法问题,但是你的建议对于那些你想更新而不是删除某个项目的情况来说很有意义,所以我接受你的回答。谢谢,听起来不错。我真的建议在任何WPF应用程序中,你只需使用好的模式来封装东西。MVVM和其他模式并不是万能的,但它们至少让这样的情况变得容易多了。直接绑定所有数据并快速完成任务很有诱惑力,但随着您实施更多的现实项目和需求,快速和肮脏的方法可能会分崩离析。例如,我发现我的DB在所有情况下都很少直接反映我的UI,除了最简单的情况或一些一次性的管理屏幕。我实际上使用的是MVVM,而且大部分都是b甚至按照你的建议去做。这个特定的实例是一个非常奇怪的UI需求,屏幕根本无法很好地映射到数据。UI可能需要重新设计,但我需要一个快速的临时修复。