绑定不订阅 PropertyChangedHandler

本文关键字:PropertyChangedHandler 绑定 | 更新日期: 2023-09-27 18:29:08

好吧,所以我已经研究这个很长时间了,不明白为什么它不起作用。

我有一个从我的用户控件标签绑定到类cell中的属性的绑定。此类实现接口INotifyPropertyChanged 。每次调用 set 方法时,它都会调用 OnPropertyChanged("value) 它应该更新它绑定到的标签。然而,事实并非如此。

我对堆栈进行了一些研究,以澄清我检查过的一些问题:

我确实设置了我的数据上下文,因为我使用 mvvm light 它被设置为视图模型定位器。

此属性位于视图模型之外,但它应该是为了不使其更容易扩展到其他大小的数独。

编辑:更改的属性被触发,但处理程序始终为空,我怀疑它没有被订阅,因此标题。

编辑 2 代码是数独游戏,它基本上是一个 3x3 的网格,网格为 3x3 这里的层次结构将是 Outtergrid 有内部网格,内部网格有单元格我认为最好不要包含这些代码,因为它们基本相同。

声明为 MainWindow.Window 的数据上下文的截图:

<Window x:Class="SudokuWPF.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:SudokuWPF"
    DataContext="{Binding Main, Source={StaticResource Locator}}"
    Title="SudokuWindow" Height="350" Width="525">

这是Cell类的代码

public class Cell : INotifyPropertyChanged
{
    private int _value;

    public int Value
    {
        get { return _value; }
        set
        {
            _value = value;
            //Content = _value;
            OnPropertyChanged("Value");
        } 
    }

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

以及用户控件中的绑定

<UserControl x:Class="SudokuWPF.UserControlSudoku"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:LocalControl="clr-namespace:SudokuWPF"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
         HorizontalAlignment ="Stretch"
         HorizontalContentAlignment ="Stretch"
         VerticalAlignment ="Stretch"
         VerticalContentAlignment ="Stretch"
         Foreground="White"
         Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}">
<UserControl.Resources>
    <LocalControl:Cell x:Key="Cell"></LocalControl:Cell>
    <LocalControl:Innergrid x:Key="Innergrid"></LocalControl:Innergrid>
    <LocalControl:OuterGrid x:Key="OuterGrid"></LocalControl:OuterGrid>
    <DataTemplate x:Key="CellTemplate">
        <Border x:Name="Border" BorderBrush="AliceBlue" BorderThickness="1">
            <Label Content="{Binding Source={StaticResource Cell}, Path=Value, UpdateSourceTrigger=PropertyChanged}"></Label>
        </Border>
    </DataTemplate>

任何帮助将不胜感激。

绑定不订阅 PropertyChangedHandler

好吧,

在错误地将数据上下文从问题中消除之后,事实证明这是问题的核心。我现在将数据上下文绑定到我的外部网格对象,如下所示:

<UserControl x:Class="SudokuWPF.UserControlSudoku"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d"
         HorizontalAlignment ="Stretch"
         HorizontalContentAlignment ="Stretch"
         VerticalAlignment ="Stretch"
         VerticalContentAlignment ="Stretch"
         Foreground="White"
         Width="{Binding RelativeSource={RelativeSource Self}, Path=ActualHeight}"
         DataContext="{Binding Source=OuterGrid}"
        >

public OuterGrid outerGrid = new OuterGrid();
    public UserControlSudoku()
    {
        InitializeComponent();
        MainList.DataContext = outerGrid;
    }