wpf update binding property on converter property change












0














I have a TextBlock which has a Foreground property bound with MultiBinding as following:



<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource BlToBrshConv1}">
<Binding Path="SomePropertyOfOwnerClass" />
<Binding Path="AnotherProperty"/>
</MultiBinding>
</TextBlock.Foreground>


The converter BlToBrshConv1 is as the following:



Class BlToBrshConv1
Implements IMultiValueConverter
Property InheritedBrush as Brush
Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
Try
Dim b1 As Boolean = CBool(values(0))
Dim b2 As Boolean = CBool(values(1))
If b1 = True AndAlso b2 = True Then
' Return SomeBrush0
ElseIf b1 Then
' Return SomeBrush1
Else
Return InheritedBrush
End If
Catch ex As Exception
Return InheritedBrush
End Try


Now my problem is when The property 'InheritedBrush' of the converter itself, I need to update the 'Foreground' brush.



The Foreground brush doesn't update because the bound properties ("SomePropertyOfOwnerClass" and "AnotherProperty") didnot change.



Any Ideas?










share|improve this question


















  • 1




    Add another Binding to the MultiBinding.
    – Clemens
    Nov 12 at 20:41










  • As an aside, "If b1 = True AndAlso b2 = True Then" can be simplified as "If b1 AndAlso b2 Then"
    – SezMe
    Nov 12 at 22:26
















0














I have a TextBlock which has a Foreground property bound with MultiBinding as following:



<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource BlToBrshConv1}">
<Binding Path="SomePropertyOfOwnerClass" />
<Binding Path="AnotherProperty"/>
</MultiBinding>
</TextBlock.Foreground>


The converter BlToBrshConv1 is as the following:



Class BlToBrshConv1
Implements IMultiValueConverter
Property InheritedBrush as Brush
Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
Try
Dim b1 As Boolean = CBool(values(0))
Dim b2 As Boolean = CBool(values(1))
If b1 = True AndAlso b2 = True Then
' Return SomeBrush0
ElseIf b1 Then
' Return SomeBrush1
Else
Return InheritedBrush
End If
Catch ex As Exception
Return InheritedBrush
End Try


Now my problem is when The property 'InheritedBrush' of the converter itself, I need to update the 'Foreground' brush.



The Foreground brush doesn't update because the bound properties ("SomePropertyOfOwnerClass" and "AnotherProperty") didnot change.



Any Ideas?










share|improve this question


















  • 1




    Add another Binding to the MultiBinding.
    – Clemens
    Nov 12 at 20:41










  • As an aside, "If b1 = True AndAlso b2 = True Then" can be simplified as "If b1 AndAlso b2 Then"
    – SezMe
    Nov 12 at 22:26














0












0








0







I have a TextBlock which has a Foreground property bound with MultiBinding as following:



<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource BlToBrshConv1}">
<Binding Path="SomePropertyOfOwnerClass" />
<Binding Path="AnotherProperty"/>
</MultiBinding>
</TextBlock.Foreground>


The converter BlToBrshConv1 is as the following:



Class BlToBrshConv1
Implements IMultiValueConverter
Property InheritedBrush as Brush
Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
Try
Dim b1 As Boolean = CBool(values(0))
Dim b2 As Boolean = CBool(values(1))
If b1 = True AndAlso b2 = True Then
' Return SomeBrush0
ElseIf b1 Then
' Return SomeBrush1
Else
Return InheritedBrush
End If
Catch ex As Exception
Return InheritedBrush
End Try


Now my problem is when The property 'InheritedBrush' of the converter itself, I need to update the 'Foreground' brush.



The Foreground brush doesn't update because the bound properties ("SomePropertyOfOwnerClass" and "AnotherProperty") didnot change.



Any Ideas?










share|improve this question













I have a TextBlock which has a Foreground property bound with MultiBinding as following:



<TextBlock.Foreground>
<MultiBinding Converter="{StaticResource BlToBrshConv1}">
<Binding Path="SomePropertyOfOwnerClass" />
<Binding Path="AnotherProperty"/>
</MultiBinding>
</TextBlock.Foreground>


The converter BlToBrshConv1 is as the following:



Class BlToBrshConv1
Implements IMultiValueConverter
Property InheritedBrush as Brush
Public Function Convert(values() As Object, targetType As Type, parameter As Object, culture As CultureInfo) As Object Implements IMultiValueConverter.Convert
Try
Dim b1 As Boolean = CBool(values(0))
Dim b2 As Boolean = CBool(values(1))
If b1 = True AndAlso b2 = True Then
' Return SomeBrush0
ElseIf b1 Then
' Return SomeBrush1
Else
Return InheritedBrush
End If
Catch ex As Exception
Return InheritedBrush
End Try


Now my problem is when The property 'InheritedBrush' of the converter itself, I need to update the 'Foreground' brush.



The Foreground brush doesn't update because the bound properties ("SomePropertyOfOwnerClass" and "AnotherProperty") didnot change.



Any Ideas?







c# wpf vb.net imultivalueconverter






share|improve this question













share|improve this question











share|improve this question




share|improve this question










asked Nov 12 at 20:05









Askcomp eugi-tech

185




185








  • 1




    Add another Binding to the MultiBinding.
    – Clemens
    Nov 12 at 20:41










  • As an aside, "If b1 = True AndAlso b2 = True Then" can be simplified as "If b1 AndAlso b2 Then"
    – SezMe
    Nov 12 at 22:26














  • 1




    Add another Binding to the MultiBinding.
    – Clemens
    Nov 12 at 20:41










  • As an aside, "If b1 = True AndAlso b2 = True Then" can be simplified as "If b1 AndAlso b2 Then"
    – SezMe
    Nov 12 at 22:26








1




1




Add another Binding to the MultiBinding.
– Clemens
Nov 12 at 20:41




Add another Binding to the MultiBinding.
– Clemens
Nov 12 at 20:41












As an aside, "If b1 = True AndAlso b2 = True Then" can be simplified as "If b1 AndAlso b2 Then"
– SezMe
Nov 12 at 22:26




As an aside, "If b1 = True AndAlso b2 = True Then" can be simplified as "If b1 AndAlso b2 Then"
– SezMe
Nov 12 at 22:26












1 Answer
1






active

oldest

votes


















0














You could change the binding using triggers.



<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Foreground" Value="{Binding Defaultbrush}"/>
<Style.Triggers>
<DataTrigger Binding="{Binding SomePropertyOfOwnerClass}">
<Setter Property="Foreground" Value="{Binding SomeBrush1}"/>
</DataTrigger>
<DataTrigger Binding="{Binding AnotherProperty}">
<Setter Property="Foreground" Value="{Binding InheritedBrush}"/>
</DataTrigger>
<MultiDataTrigger>
<MultiDataTrigger.Conditions>
<Condition Binding="{Binding SomePropertyOfOwnerClass}" Value="True"/>
<Condition Binding="{Binding AnotherProperty}" Value="True"/>
</MultiDataTrigger.Conditions>
<Setter Property="Foreground" Value="{Binding SomeBrush0}"/>
</MultiDataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>





share|improve this answer





















    Your Answer






    StackExchange.ifUsing("editor", function () {
    StackExchange.using("externalEditor", function () {
    StackExchange.using("snippets", function () {
    StackExchange.snippets.init();
    });
    });
    }, "code-snippets");

    StackExchange.ready(function() {
    var channelOptions = {
    tags: "".split(" "),
    id: "1"
    };
    initTagRenderer("".split(" "), "".split(" "), channelOptions);

    StackExchange.using("externalEditor", function() {
    // Have to fire editor after snippets, if snippets enabled
    if (StackExchange.settings.snippets.snippetsEnabled) {
    StackExchange.using("snippets", function() {
    createEditor();
    });
    }
    else {
    createEditor();
    }
    });

    function createEditor() {
    StackExchange.prepareEditor({
    heartbeatType: 'answer',
    autoActivateHeartbeat: false,
    convertImagesToLinks: true,
    noModals: true,
    showLowRepImageUploadWarning: true,
    reputationToPostImages: 10,
    bindNavPrevention: true,
    postfix: "",
    imageUploader: {
    brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
    contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
    allowUrls: true
    },
    onDemand: true,
    discardSelector: ".discard-answer"
    ,immediatelyShowMarkdownHelp:true
    });


    }
    });














    draft saved

    draft discarded


















    StackExchange.ready(
    function () {
    StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53269335%2fwpf-update-binding-property-on-converter-property-change%23new-answer', 'question_page');
    }
    );

    Post as a guest















    Required, but never shown

























    1 Answer
    1






    active

    oldest

    votes








    1 Answer
    1






    active

    oldest

    votes









    active

    oldest

    votes






    active

    oldest

    votes









    0














    You could change the binding using triggers.



    <TextBlock>
    <TextBlock.Style>
    <Style TargetType="TextBlock">
    <Setter Property="Foreground" Value="{Binding Defaultbrush}"/>
    <Style.Triggers>
    <DataTrigger Binding="{Binding SomePropertyOfOwnerClass}">
    <Setter Property="Foreground" Value="{Binding SomeBrush1}"/>
    </DataTrigger>
    <DataTrigger Binding="{Binding AnotherProperty}">
    <Setter Property="Foreground" Value="{Binding InheritedBrush}"/>
    </DataTrigger>
    <MultiDataTrigger>
    <MultiDataTrigger.Conditions>
    <Condition Binding="{Binding SomePropertyOfOwnerClass}" Value="True"/>
    <Condition Binding="{Binding AnotherProperty}" Value="True"/>
    </MultiDataTrigger.Conditions>
    <Setter Property="Foreground" Value="{Binding SomeBrush0}"/>
    </MultiDataTrigger>
    </Style.Triggers>
    </Style>
    </TextBlock.Style>
    </TextBlock>





    share|improve this answer


























      0














      You could change the binding using triggers.



      <TextBlock>
      <TextBlock.Style>
      <Style TargetType="TextBlock">
      <Setter Property="Foreground" Value="{Binding Defaultbrush}"/>
      <Style.Triggers>
      <DataTrigger Binding="{Binding SomePropertyOfOwnerClass}">
      <Setter Property="Foreground" Value="{Binding SomeBrush1}"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding AnotherProperty}">
      <Setter Property="Foreground" Value="{Binding InheritedBrush}"/>
      </DataTrigger>
      <MultiDataTrigger>
      <MultiDataTrigger.Conditions>
      <Condition Binding="{Binding SomePropertyOfOwnerClass}" Value="True"/>
      <Condition Binding="{Binding AnotherProperty}" Value="True"/>
      </MultiDataTrigger.Conditions>
      <Setter Property="Foreground" Value="{Binding SomeBrush0}"/>
      </MultiDataTrigger>
      </Style.Triggers>
      </Style>
      </TextBlock.Style>
      </TextBlock>





      share|improve this answer
























        0












        0








        0






        You could change the binding using triggers.



        <TextBlock>
        <TextBlock.Style>
        <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="{Binding Defaultbrush}"/>
        <Style.Triggers>
        <DataTrigger Binding="{Binding SomePropertyOfOwnerClass}">
        <Setter Property="Foreground" Value="{Binding SomeBrush1}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding AnotherProperty}">
        <Setter Property="Foreground" Value="{Binding InheritedBrush}"/>
        </DataTrigger>
        <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding SomePropertyOfOwnerClass}" Value="True"/>
        <Condition Binding="{Binding AnotherProperty}" Value="True"/>
        </MultiDataTrigger.Conditions>
        <Setter Property="Foreground" Value="{Binding SomeBrush0}"/>
        </MultiDataTrigger>
        </Style.Triggers>
        </Style>
        </TextBlock.Style>
        </TextBlock>





        share|improve this answer












        You could change the binding using triggers.



        <TextBlock>
        <TextBlock.Style>
        <Style TargetType="TextBlock">
        <Setter Property="Foreground" Value="{Binding Defaultbrush}"/>
        <Style.Triggers>
        <DataTrigger Binding="{Binding SomePropertyOfOwnerClass}">
        <Setter Property="Foreground" Value="{Binding SomeBrush1}"/>
        </DataTrigger>
        <DataTrigger Binding="{Binding AnotherProperty}">
        <Setter Property="Foreground" Value="{Binding InheritedBrush}"/>
        </DataTrigger>
        <MultiDataTrigger>
        <MultiDataTrigger.Conditions>
        <Condition Binding="{Binding SomePropertyOfOwnerClass}" Value="True"/>
        <Condition Binding="{Binding AnotherProperty}" Value="True"/>
        </MultiDataTrigger.Conditions>
        <Setter Property="Foreground" Value="{Binding SomeBrush0}"/>
        </MultiDataTrigger>
        </Style.Triggers>
        </Style>
        </TextBlock.Style>
        </TextBlock>






        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 12 at 23:01









        Neil B

        8691412




        8691412






























            draft saved

            draft discarded




















































            Thanks for contributing an answer to Stack Overflow!


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.





            Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


            Please pay close attention to the following guidance:


            • Please be sure to answer the question. Provide details and share your research!

            But avoid



            • Asking for help, clarification, or responding to other answers.

            • Making statements based on opinion; back them up with references or personal experience.


            To learn more, see our tips on writing great answers.




            draft saved


            draft discarded














            StackExchange.ready(
            function () {
            StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53269335%2fwpf-update-binding-property-on-converter-property-change%23new-answer', 'question_page');
            }
            );

            Post as a guest















            Required, but never shown





















































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown

































            Required, but never shown














            Required, but never shown












            Required, but never shown







            Required, but never shown







            Popular posts from this blog

            Xamarin.iOS Cant Deploy on Iphone

            Glorious Revolution

            Dulmage-Mendelsohn matrix decomposition in Python