.net 多绑定转换器绑定

.net 多绑定转换器绑定,.net,wpf,imultivalueconverter,.net,Wpf,Imultivalueconverter,多绑定转换器出现问题 我知道两次发送相同的值是没有意义的 我这样做是为了在单个绑定上隔离 在转换器中,我在转换为布尔值时出错 价值是 {DependencyProperty.UnsetValue} 但是“RWnet”是一个bool <ContentPresenter Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" x:Name="fieldTemplateDetail" Content="{Binding}"

多绑定转换器出现问题
我知道两次发送相同的值是没有意义的
我这样做是为了在单个绑定上隔离
在转换器中,我在转换为布尔值时出错
价值是

{DependencyProperty.UnsetValue}

但是“RWnet”是一个bool

<ContentPresenter Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"
        x:Name="fieldTemplateDetail"
        Content="{Binding}"
        ContentTemplateSelector="{StaticResource fieldTemplateSelector}">
    <ContentPresenter.Visibility>
        <MultiBinding Converter="{StaticResource visabilityConverterTwoBool}">
            <Binding Path="RWnet" />
            <Binding Path="RWnet" />
        </MultiBinding>
    </ContentPresenter.Visibility>
</ContentPresenter>

public class VisabilityConverterTwoBool : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values == null) return Visibility.Visible;
        if (values.Length != 2) return Visibility.Visible;
        try
        {
            if ((bool)values[0] == false) return Visibility.Collapsed;
            if ((bool)values[1] == false) return Visibility.Collapsed;
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.Message, "VisabilityConverterTwoBool");
            Debug.WriteLine(values[0].ToString());
            Debug.WriteLine(values[1].ToString());
        }
        return Visibility.Visible;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return null;
    }
}

公共类VisabilityConverter工具:IMultiValueConverter
{
公共对象转换(对象[]值,类型targetType,对象参数,CultureInfo区域性)
{
if(values==null)返回Visibility.Visible;
如果(values.Length!=2)返回Visibility.Visible;
尝试
{
if((bool)值[0]==false)返回可见性。折叠;
if((bool)值[1]==false)返回可见性。折叠;
}
捕获(例外情况除外)
{
Debug.WriteLine(例如消息“VisabilityConverterWoBool”);
Debug.WriteLine(值[0].ToString());
Debug.WriteLine(值[1].ToString());
}
返回可见性。可见;
}
公共对象[]转换回(对象值,类型[]目标类型,对象参数,CultureInfo区域性)
{
返回null;
}
}
如果我发送实际多绑定的另一半,它就会工作 (结果错误但无错误)


但这很管用
RWnet是一个bool

<ContentPresenter Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2"
        Visibility="{Binding Path=RWnet, Converter={StaticResource bvc}}"
        x:Name="fieldTemplateDetail"
        Content="{Binding}"
        ContentTemplateSelector="{StaticResource fieldTemplateSelector}"/>

<BooleanToVisibilityConverter x:Key="bvc" />

对于McGarnagle,这是数据上下文

<ListBox  Grid.Row="4" Grid.Column="0" Grid.ColumnSpan="2" x:Name="lbCurDocFields" 
            ItemsSource="{Binding Source={StaticResource curDocFields}}" LostFocus="lbCurDocFields_LostFocus"

根据您连接数据上下文的方式,不能保证绑定在您期望的时候准备就绪。完全验证输入,应解决问题:

if (values.Length != 2 && values[0] as bool? == null || values[1] as bool? == null)
    return Visibility.Visible;

但它有一个可用的数据上下文。请参见底部工作原理的示例。该ContentPresenter显示来自同一绑定的其他属性。我将发布ItemsSource绑定。@它显示属性,但您确定它在应用DataContext之前的一瞬间没有显示“未设置的值”吗?尽管我不理解您的答案,但我插入了它,它似乎起了作用+1.现在。如果我不能打破它,我会给它一个检查。@责怪它只是。。。绑定不一定按顺序发生。
ContentPresenter
不会中断,因为它可以处理未设置的值。同样,通常最好假设通过绑定到达的任何输入都可能是unset/null/invalid。但是,它与工作的直接单绑定(同时也连接到转换器)有何不同?这是布勒吗?关于多重强制它等待一个真正的值?我对那些不愿尝试我的答案的人感到沮丧,因为他们不理解我的答案。
if (values.Length != 2 && values[0] as bool? == null || values[1] as bool? == null)
    return Visibility.Visible;