绑定不订阅 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>
任何帮助将不胜感激。
好吧,
在错误地将数据上下文从问题中消除之后,事实证明这是问题的核心。我现在将数据上下文绑定到我的外部网格对象,如下所示:
<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;
}