WPF双向结合与静态特性



我当前在WPF 4.6.1中遇到双向绑定的问题。它根本不起作用,我使用了此示例。https://www.c-sharpcorner.com/uploadfile/mahesh/binding-static-patatic-pacerties-in-wpf-4-4-5/

我的项目有两个窗口(当在第一个窗口上按下文本块和显示数据的表单时,可以打开一个数字键盘(。它还具有一个静态类,可容纳在虚拟键盘上输入的信息。

这是打开键盘

的文本框
<TextBlock Margin="5 10 0 10" x:Name="submittedQty" Background="PaleVioletRed" HorizontalAlignment="Stretch" TextAlignment="Center" Text="{Binding Path=(local:TemporaryData.SubmittedQuantity), Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" FontSize="22" FontWeight="Bold" MouseLeftButtonDown="submittedQty_MouseLeftButtonDown"/>

这是我持有信息的静态课程。

static class TemporaryData //Static Class
{
    private static string _SubmittedQuantity;
    private static string _ConfirmedQuantity;
    public static event EventHandler QuantityChanged;
    public static string SubmittedQuantity {
        get => _SubmittedQuantity;
        set
        {
            if (value != _SubmittedQuantity)
            {
                _SubmittedQuantity = value;
                if (QuantityChanged != null)
                    QuantityChanged(null, EventArgs.Empty);
            }
        }
    }
    public static string ConfirmedQuantity {
        get => _ConfirmedQuantity;
        set
        {
            if (value != _ConfirmedQuantity)
            {
                _ConfirmedQuantity = value;
                if (QuantityChanged != null)
                {
                    QuantityChanged(null, EventArgs.Empty);
                }
            }
        }
    }

按下我的虚拟数字键盘上的确定后,我执行此方法:

    private void okBtn_Click(object sender, RoutedEventArgs e)
    {
        models.TemporaryData.ConfirmedQuantity = typedTextTxtBox.Text;
        this.Close();
    }

运行调试器我注意到,当我的值在虚拟键盘上更新时,行

if (QuantityChanged != null)

由于数量变为null而跳过。

任何人都可以让我知道为什么当静态类的值更改时,文本块不更新?

谢谢


遵循Clemens的建议后,我更新了代码:

更新xml

<TextBlock Margin="5 10 0 10" x:Name="submittedQty" Background="PaleVioletRed" HorizontalAlignment="Stretch" TextAlignment="Center" Text="{Binding Path=(local:TemporaryData.SubmittedQuantity)}" FontSize="22" FontWeight="Bold" MouseLeftButtonDown="submittedQty_MouseLeftButtonDown"/>

静态类

static class TemporaryData
    {
        private static string _SubmittedQuantity;
        private static string _ConfirmedQuantity;
        //public static event EventHandler QuantityChanged;
        public static event EventHandler<PropertyChangedEventArgs> StaticPropertyChanged;
        public static string SubmittedQuantity {
            get => _SubmittedQuantity;
            set
            {
                if (value != _SubmittedQuantity)
                {
                    _SubmittedQuantity = value;
                    StaticPropertyChanged?.Invoke(null,
                        new PropertyChangedEventArgs(nameof(SubmittedQuantity)));
                }
            }
        }
        public static string ConfirmedQuantity {
            get => _ConfirmedQuantity;
            set
            {
                if (value != _ConfirmedQuantity)
                {
                    _ConfirmedQuantity = value;
                    StaticPropertyChanged?.Invoke(null,
                        new PropertyChangedEventArgs(nameof(ConfirmedQuantity)));
                }
            }
        }

QuantityChanged事件仅适用于Quantity属性。

为了通知SubmittedQuantity属性的更改值,应该有一个SubmittedQuantityChanged事件:

public static event EventHandler SubmittedQuantityChanged;
public static string SubmittedQuantity
{
    get => _SubmittedQuantity;
    set
    {
        if (value != _SubmittedQuantity)
        {
            _SubmittedQuantity = value;
            SubmittedQuantityChanged?.Invoke(null, EventArgs.Empty);
        }
    }
}

imo更好的选择是为所有静态属性使用公共属性更改的事件:

public static event PropertyChangedEventHandler StaticPropertyChanged;
public static string SubmittedQuantity
{
    get => _SubmittedQuantity;
    set
    {
        if (value != _SubmittedQuantity)
        {
            _SubmittedQuantity = value;
            StaticPropertyChanged?.Invoke(null,
                new PropertyChangedEventArgs(nameof(SubmittedQuantity)));
        }
    }
}

请参阅WPF版本4.5中的新事物 - 有关详细信息的绑定到静态属性。

最新更新