Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 8361909
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: June 9, 20262026-06-09T11:48:46+00:00 2026-06-09T11:48:46+00:00

I have a simple WPF window with a TabItem containing a ComboBox with colors

  • 0

I have a simple WPF window with a TabItem containing a ComboBox with colors and a custom Canvas drawing a rectangle with that color. In my PaintCanvas I have a DependencyProperty like this:

class PaintCanvas : System.Windows.Controls.Canvas
{
    public static readonly DependencyProperty PaintObjectProperty = DependencyProperty.Register(
      "PaintObject", typeof(PaintObject), typeof(PaintCanvas), new PropertyMetadata(OnPaintObjectChanged));


    public PaintObject PaintObject
    {
        get { return this.GetValue(PaintObjectProperty) as PaintObject; }
        set 
        {
            this.SetValue(PaintObjectProperty, value);
        }
    }

    private static void OnPaintObjectChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        PaintCanvas canvas = (PaintCanvas)d;

        // Update stuff

        canvas.InvalidateVisual();
    }

    protected override void OnRender(DrawingContext dc)
    {
        base.OnRender(dc);

        if (PaintObject != null)
        {
            dc.DrawRectangle(new SolidColorBrush(PaintObject.Color), null, new Rect(0, 0, PaintObject.Width, PaintObject.Height));
        }
    }
}

The PaintObject dependency property is bound in xaml to its corresponding property in PaintViewModel:

<TabControl>
    <TabItem DataContext="{Binding PaintViewModel}">
        <StackPanel >
            <ComboBox ItemsSource="{Binding Colors}" SelectedItem="{Binding Color}" />
            <my:PaintCanvas Width="100" Height="100" PaintObject="{Binding PaintObject}" />
        </StackPanel>
    </TabItem>
</TabControl>

PaintViewModel is a property in the Window’s ViewModel:

class MainViewModel
{
    PaintViewModel paintViewModel;

    public MainViewModel()
    {
        paintViewModel = new PaintViewModel();
    }

    public PaintViewModel PaintViewModel
    {
        get { return paintViewModel; }
    }

    ...
}

The actual PaintViewModel:

class PaintViewModel : INotifyPropertyChanged
{
    PaintObject paintObject;
    ObservableCollection<Color> colors = new ObservableCollection<Color>();
    Color currentColor;

    public PaintObject PaintObject
    {
        get { return paintObject; }
        set { paintObject = value; RaisePropertyChanged("PaintObject"); }
    }

    public ObservableCollection<Color> Colors
    {
        get { return colors; }
    }

    public Color Color
    {
        get { return currentColor; }
        set { 
            currentColor = value; 
            RaisePropertyChanged("Color");
            paintObject.Color = currentColor;
            RaisePropertyChanged("PaintObject");
        }
    }

    // Constructors and INotifyPropertyChanged stuff... 
}

The TabItem seems to be correctly bound to the view model, because the color combobox works as it should. However, although the paint object is updated and RaisePropertyChanged(“PaintObject”) is called, the DependencyProperty in PaintCanvas is never updated. What am I doing wrong here??

  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-06-09T11:48:47+00:00Added an answer on June 9, 2026 at 11:48 am

    I don’t see that you change reference to PaintObject, you cahanged one of the properties of it(Color) and fire as PaintObject is changed, and since it is not, dependency property doesnt refresh

    As a solution, you can add Color dependency property in the PaintCanvas, and bind Color to PaintObject.Color in xaml

    <my:PaintCanvas Width="100" Height="100" PaintObject="{Binding PaintObject}" Color={Binding PaintObject.Color} />
    

    And if you not forget to call NotifyPropertyChanged of Color property in PaintObject, PaintConvas Color property will be fired to be changed

    I see some mess in your design, try to keep things simple

    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

The following scenario bothers me: I have a simple WPF Window that has a
I have a simple WPF window that has 12 buttons on it. I want
I have a simple WPF Window with a Canvas on it and the Canvas
I have a simple WPF application that uses ClickOnce to handle installing. Within this
Here's my hypothetical example. I have a very simple WPF window with a one
I have a WPF window that uses validation. I created an error template that
I have a simple wpf app which has a button that increments a value
I have a mediaelement tag in my wpf-window. It's playing a simple animation, similar
I have encountered something very strange, simple WPF application <Window x:Class=ListBoxSelection.MainWindow xmlns=http://schemas.microsoft.com/winfx/2006/xaml/presentation xmlns:x=http://schemas.microsoft.com/winfx/2006/xaml Title=MainWindow
I have a simple wpf application. In main window i have stack panel and

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.