Свойство зависимости WPF не устанавливается при инициализации - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь установить ширину UserControl во время инициализации во ViewModel, но он получает только ноль.Когда я изменяю размер окна, оно получает правильную ширину.

MainWindow.xaml extract:

<local:MapControl x:Name="MapControl" 
    DataContext="{Binding MapViewModel}"
    ActualControlWidth="{Binding ActualControlWidth, Mode=OneWayToSource}" />

MapControl.xaml.cs:

public partial class MapControl : UserControl
{
    public MapControl()
    {
        InitializeComponent();
        SizeChanged += OnControlSizeChanged;
    }


    public static readonly DependencyProperty ActualControlWidthProperty = DependencyProperty.Register(
        "ActualControlWidth",
        typeof(double),
        typeof(MapControl),
        new FrameworkPropertyMetadata(PropertyChangedCallback)); //here it does not have any influence if i put default(double) or not

    private static void PropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var newVar = e.NewValue;
    }

    public double ActualControlWidth
    {
        get { return (double)GetValue(ActualControlWidthProperty); }
        set { SetValue(ActualControlWidthProperty, value); } //here comes the value as 785
    }

    private void OnControlSizeChanged(object sender, SizeChangedEventArgs e)
    {
        ActualControlWidth = ActualWidth;
    }
}

MapViewModel.cs:

public class MapViewModel : ViewModelBase
{
    private double _actualControlWidth;
    private Map _map;

    public MapViewModel()
    {
       ...
    }

    public Map Map
    {
        get => _map;
        set => Set(() => Map, ref _map, value);
    }

    public double ActualControlWidth
    {
        get => _actualControlWidth;
        set => _actualControlWidth = value; //this is where the value comes as 0
    }
}

Спасибо за вашу помощь!

Полный пример воспроизведения на моем Github https://github.com/czechdude/dependencypropertyissue

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...