WPF:在多值转换器的ConvertBack方法中,有没有一种获得原始值的方法?

WPF:在多值转换器的ConvertBack方法中,有没有一种获得原始值的方法?,wpf,xaml,multibinding,imultivalueconverter,Wpf,Xaml,Multibinding,Imultivalueconverter,我编写了一个多值转换器,它检查给定列表是否包含给定值,如果包含,则返回true。我使用它绑定到自定义复选框列表。现在我想写一个ConvertBack方法,这样如果选中复选框,原始值就会发送到模型。是否有方法访问ConvertBack方法中的值 XAML: 我在绑定时得到了正确的结果,但是在转换回来时有没有办法获得绑定id?我想实现的是,如果不选中复选框,值将从列表中删除,如果选中,值将添加到列表中。我解决了我的问题,希望解决方案也能帮助您。将您拥有的多重绑定放在DataContext属性中,

我编写了一个多值转换器,它检查给定列表是否包含给定值,如果包含,则返回true。我使用它绑定到自定义复选框列表。现在我想写一个ConvertBack方法,这样如果选中复选框,原始值就会发送到模型。是否有方法访问ConvertBack方法中的值

XAML:



我在绑定时得到了正确的结果,但是在转换回来时有没有办法获得绑定id?我想实现的是,如果不选中复选框,值将从列表中删除,如果选中,值将添加到列表中。

我解决了我的问题,希望解决方案也能帮助您。将您拥有的多重绑定放在DataContext属性中,而不是放在IsChecked属性中。这可能是我们的问题不同之处。。。在convert方法中,我使用绑定中的数据获取对象,然后返回myobject.text。我改为只返回对象,以便将其绑定到datacontext。然后我将textbox.text属性绑定到myobject的text属性。它似乎工作得很好。然后可以将删除值的列表绑定到复选框。ischecked。。。我想是吧。我不太清楚你想做什么

我想这可能会让你走上正确的道路

<ListBox.ItemTemplate>
<HierarchicalDataTemplate>
    <CheckBox Content="{Binding Path=Description}">
        <CheckBox.DataContext>
            <MultiBinding Converter="{x:Static Classes:ListContainsMultiConverter.Instance}">
                <Binding Path="Id" />
                <Binding Path="DataContext.ContactTypes" RelativeSource="{RelativeSource AncestorType={x:Type Window}}" />
            </MultiBinding>
        </CheckBox.DataContext>
        <CheckBox.IsChecked>
            <Binding Path="Some_Property_For_IsChecked_In_Some_Object_In_The_Converter" />
        </CheckBox.IsChecked>
    </CheckBox>
</HierarchicalDataTemplate>


我知道这是一个老问题,但这个解决方案可能会帮助其他人

您可以将
IsChecked
绑定设置为
单向
,并使用
复选框
命令
属性来执行检查逻辑,而不是使用
IMultiValueConverter
ConvertBack
方法

<ListBox.ItemTemplate>
    <HierarchicalDataTemplate>
        <CheckBox Content="{Binding Path=.}" Command="{Binding Path=CheckBoxCommand, RelativeSource={RelativeSource AncestorType={x:Type Window}}}" CommandParameter="{Binding Path=.}">
            <CheckBox.IsChecked>
                <MultiBinding Converter="{x:Static Classes:ListContainsMultiConverter.Instance}" Mode="OneWay">
                    <Binding Path="." />
                    <Binding Path="SelectedItems" RelativeSource="{RelativeSource AncestorType={x:Type Window}}" />
                </MultiBinding>
            </CheckBox.IsChecked>
        </CheckBox>
    </HierarchicalDataTemplate>
</ListBox.ItemTemplate>

然后,添加执行类似以下操作的CheckBoxCommand:

    // the items bound to your checkbox
    public Collection<string> Items { get; set; }

    // the list of selected items
    public Collection<string> SelectedItems { get; set; }

    private void ExecuteCheckBoxCommand(string obj)
    {
        SelectedItems.Add(obj);
    }
//绑定到复选框的项目
公共集合项{get;set;}
//选定项目的列表
公共集合SelectedItems{get;set;}
私有void ExecuteCheckBoxCommand(字符串obj)
{
选择editems.Add(obj);
}

我知道这是一种稍微迂回的方法,但是
IMultiValueConverter.ConvertBack
方法真的很无用-如果不访问当前的绑定值,我想不出它有太多的用途。

我有一个类似的问题,我的多绑定中的一个绑定是一个包含包含一个文本字段。多重绑定基于另一个绑定值绑定到其中一个文本框。我需要文本框来更改convertBack上对象的文本,但我所拥有的只是新值,而不是对象的文本需要更改的内容感谢这种方法,它对我很有效。我花了一些时间才意识到ConvertBack是完全无用的。他们应该把它放在文档中,为我们节省一些时间。是的,完全没有用:(
    // the items bound to your checkbox
    public Collection<string> Items { get; set; }

    // the list of selected items
    public Collection<string> SelectedItems { get; set; }

    private void ExecuteCheckBoxCommand(string obj)
    {
        SelectedItems.Add(obj);
    }