INotifyPropertyChanged nie działa poprawnie

0

Witam, w moim projekcie korzystam ze wzorca MVVM . W viewmodelach dołączam interface inotifypropertychanged Jest jedna zmienna, którą chcę zbindować w dwóch oddzielnych widokach . W widoku, który jest bezpośrednio podpięty pod view model - wszystko jest fajnie , działa, wartość się zmienia. W innym widoku, w którym chcę wykorzystać tą samą zmienną niestety nie jest już tak kolorowo.
Próbowałem to zrobić poprzez staticresource , viewmodel dziedziczyl z viewmodelu , obie klasy dziedziczyly z klasy w której znajdowal sie properties + inotifypropertychanged. Nic nie pomogło. Proszę o pomoc ...

1

Masz błąd w 73 linijce.

0

Dzięki!! Właśnie tam był błąd, teraz działa wszystko poprawnie ! O to chodziło !

0

Dzięki!! Właśnie tam był błąd, teraz działa wszystko poprawnie ! O to chodziło !

nie ma za co. Zawsze do usług.

0

Kto wpuścił na Politechnikę Krakowską gościa, który nie potrafi zajarzyć prostej ironii i załapać, że nie można pomóc nie widząc kodu?

0

Zrozumiałem ironie bardzo dobrze, tylko musiałem stworzyć przykładowy projekt obrazujący mój problem. Oto kody:

<UserControl x:Class="Aplikacja_desktopowa.CustomerView"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
             xmlns:i="http://schemas.microsoft.com/expression/2010/interactivity"
             xmlns:ei="http://schemas.microsoft.com/expression/2010/interactions"
             mc:Ignorable="d" 
             d:DesignHeight="300" d:DesignWidth="300">
    
    <Grid x:Name="LayoutRoot" Background="White" Height="150" Width="300" 
          DataContext="{Binding Source={StaticResource Locator}, Path=CustomerViewModel}">
        <Button Content="Button" HorizontalAlignment="Center" VerticalAlignment="Center" Width="75" Command="{Binding LogowanieCommand}"/>
        <Button Content="Button"  IsEnabled="{Binding IsEnabled}" HorizontalAlignment="Left" Margin="112,104,0,0" VerticalAlignment="Top" Width="76"/>

    </Grid></UserControl>


<Window x:Class="Aplikacja_desktopowa.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:my="clr-namespace:Aplikacja_desktopowa"
        Title="MainWindow" Height="350" Width="525"
        DataContext="{Binding Source={StaticResource Locator}, Path=[MainPageViewModel]}">
    <StackPanel>
        <TextBlock Text="{Binding Path=BannerText}" FontFamily="Verdana" FontSize="18" FontWeight="Bold" HorizontalAlignment="Center" />
        <Button Content="Button" IsEnabled="{Binding Source={StaticResource Locator}, Path=CustomerViewModel.IsEnabled}"/>
        <my:CustomerView />
    </StackPanel>
</Window>


using System;
using System.ComponentModel;
using System.Runtime.CompilerServices;
using System.Windows;
using System.Windows.Input;
using System.Threading;
using System.Collections.ObjectModel;

// Toolkit namespace
using Aplikacja_desktopowa.Annotations;
using SimpleMvvmToolkit;

namespace Aplikacja_desktopowa
{
    /// <summary>
    /// This class extends ViewModelDetailBase which implements IEditableDataObject.
    /// <para>
    /// Specify type being edited <strong>DetailType</strong> as the second type argument
    /// and as a parameter to the seccond ctor.
    /// </para>
    /// <para>
    /// Use the <strong>mvvmprop</strong> snippet to add bindable properties to this ViewModel.
    /// </para>
    /// </summary>
    public class CustomerViewModel : INotifyPropertyChanged
    {
        private DelegateCommand _przycisk;
        public ICommand LogowanieCommand
        {
            get
            {
                if (_przycisk == null)
                    _przycisk = new DelegateCommand(funkcja1, funkcja2);
                return _przycisk;
            }
        }

        public void funkcja1()
        {
            MessageBox.Show("Odblokowywanie przycisku");
            IsEnabled = true;
        }
        public bool funkcja2()
        {
            return true;
        }

        private bool _isEnabled;



        public bool IsEnabled
        {
            get { return _isEnabled; }
            set
            {
                _isEnabled = value; 
                OnPropertyChanged();
            }
        }


        public event PropertyChangedEventHandler PropertyChanged;

        [NotifyPropertyChangedInvocator]
        protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
        {
            PropertyChangedEventHandler handler = PropertyChanged;
            if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName));
        }
    }
}

szablon simple mvvm

Ogólnie to chcę, by wszystkie buttony się odblokowały

1 użytkowników online, w tym zalogowanych: 0, gości: 1