gpt4 book ai didi

c# - 绑定(bind)无处不在地获取旧值

转载 作者:行者123 更新时间:2023-11-30 22:52:05 25 4
gpt4 key购买 nike

我有一个派生自 TextBox 的控件,它有 2 个额外的字符串属性:Formula 和 FormulaResult(只读):

public class SpreadsheetCellControl : TextBox, INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged = (sender, e) => { };


public string Formula
{
get;
set;
}
public string FormulaResult
{
get
{
if (Formula != null && Formula != "")
{
string formula = Formula;
formula = formula.StartsWith("=") ? formula.Substring(1) : formula;
var calculation = Calculator.Calculate(formula);
return calculation.Result.ToString();
}
else return "";
}
}

protected override void OnPreviewLostKeyboardFocus(KeyboardFocusChangedEventArgs e)
{
Formula = Text;
base.OnPreviewLostKeyboardFocus(e);
}
}

如 XAML 中所定义,当控件获得焦点时,Text 绑定(bind)到 Formula,而当控件未获得焦点时,Text 绑定(bind)到 FormulaResult:

<Style TargetType="local:SpreadsheetCellControl" BasedOn="{StaticResource HoverableStyle}">
<Setter Property="VerticalContentAlignment" Value="Center"/>

<Setter Property="Text" Value="{Binding RelativeSource={RelativeSource self}, Path=FormulaResult, UpdateSourceTrigger=PropertyChanged, Mode=OneWay}"/>

<Style.Triggers>
<Trigger Property="IsFocused" Value="true">
<Setter Property="BorderThickness" Value="2" />
<Setter Property="BorderBrush" Value="Black" />
<Setter Property="Text" Value="{Binding Formula, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"/>
</Trigger>

</Style.Triggers>
</Style>

一切正常。例如,我单击控件,键入例如“1/2”,单击其他任何地方,它显示“0.5”。

然后我将 Formula 属性从代码隐藏设置为“3”(实际上是任何值)。在我单击控件之前,它显示所有三个属性都是正确的:3、3 和 3。但是当我单击控件时,Text 属性突然变成旧的“1/2”,没有存储在任何地方。我通过放置一个 TextBlock 并将其 Text 绑定(bind)到单元格控件的所有三个值来检查这一点。调试也只显示新值。

附言此外,“公式”本身似乎并未从此处的“文本”中获取值:Setter Property="Text"Value="{Binding Formula, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"

最佳答案

Trigger 中的 Text 属性 Setter 中的 Binding 丢失了 RelativeSource Self:

<Setter Property="Text"
Value="{Binding Path=Formula,
RelativeSource={RelativeSource Self},
Mode=TwoWay,
UpdateSourceTrigger=PropertyChanged}"/>

关于c# - 绑定(bind)无处不在地获取旧值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58499879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com