【问题标题】:MultiBinding and IMultiValueConverter.Can't get workingMultiBinding 和 IMultiValueConverter。无法正常工作
【发布时间】:2019-01-07 12:16:11
【问题描述】:

我目前正在尝试编写一个代码,其重点是将三个传入变量与用户控件绑定。最后一个,按照计划,应该根据 IMultiValueConverter 中实现的逻辑交换颜色。

<UserControl
    x:Class="TestApp_WPF.User_Controls.Axis"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:Converters="clr-namespace:TestApp_WPF.Converters"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:TestApp_WPF.User_Controls"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    x:Name="UserControl_Axis"
    d:DesignHeight="300"
    d:DesignWidth="300"
    mc:Ignorable="d">

    <UserControl.Resources>

        <Converters:WyeDeltaMultiConverter x:Key="WDMultiConverter" />

    </UserControl.Resources>
    <Grid>
        <Ellipse
            Width="17"
            Height="17"
            Stroke="Black">
            <Ellipse.Fill>
                <MultiBinding Converter="{StaticResource WDMultiConverter}">

                    <Binding Path="Prty_L_feedback" />

                    <Binding Path="Prty_D_feedback" />

                    <Binding Path="Prty_Axis_failed" />

                </MultiBinding
            </Ellipse.Fill>
        </Ellipse>       
    </Grid>
</UserControl>

WDMultiConverter:

class WyeDeltaMultiConverter : IMultiValueConverter

{

    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        bool? state_0 = values[0] as bool?;
        bool? state_1 = values[1] as bool?;
        bool? state_2 = values[2] as bool?;

        if (state_0 == null && state_1 == null && state_2 == null)
            return Brushes.OrangeRed;

        if (state_0 == true && state_1 == null && state_2 == null)
            return Brushes.Azure;

        if (state_0 == true && state_1 == true && state_2 == null)
            return Brushes.LawnGreen;

        if (state_0 == true && state_1 == true && state_2 == null)
            return Brushes.OrangeRed;

        return Brushes.WhiteSmoke;
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }


}

请给点建议!

【问题讨论】:

  • “交换颜色”?您的转换器采用三个布尔值并返回一个画笔。您希望它返回什么画笔,运行应用程序时它实际返回什么? Brushes.OrangeRed 将永远不会被返回,因为您正在为相同的条件返回 Brushes.LawnGreen。
  • Converter 中的代码只是一个草图。我对其他的东西很感兴趣。如何正确绑定Multibinding。
  • 我建议你设置一个断点,看看你实际得到了什么。
  • 只是一个草图?那你想做什么?你的转换器返回什么刷子?您将在 Ellipse 中看到的就是这个。
  • 我对其他东西很感兴趣。如何正确绑定多重绑定?我认为如果我正确地进行 MultiBinding,我将能够解决所有逻辑问题。

标签: c# wpf visual-studio binding


【解决方案1】:

关于此资源有用性的谣言显然被夸大了。今天的例子正好证明了这一点。这里有几个人很快就失去了兴趣。也许在过去,我从长期的帖子来看,这个资源是由真正的代码大师访问过的。不幸的是,这些天没有。 另外值得注意的是,资源有相当不友好的界面和评分系统。

我自己创建的一个答案:它在每个 Binding 中都缺少 ElementName

<Binding ElementName="UserControl_Axis" Path="Prty_L_feedback" />

<Binding ElementName="UserControl_Axis" Path="Prty_D_feedback" />

<Binding ElementName="UserControl_Axis" Path="Prty_Axis_failed" />

当然,在 XAML 代码正常运行后,我对位于转换器中的所谓布尔逻辑进行了一些更改。

就是这样。

【讨论】:

    猜你喜欢
    • 2011-04-03
    • 1970-01-01
    • 2021-12-06
    • 2016-12-01
    • 2017-02-17
    • 2021-08-02
    • 2013-08-01
    • 2011-10-10
    • 2017-05-16
    相关资源
    最近更新 更多