gpt4 book ai didi

c# - 将两个属性绑定(bind)到 DataGridTemplateColumn TextBox WPF MVVM

转载 作者:行者123 更新时间:2023-12-03 10:33:07 26 4
gpt4 key购买 nike

我想将两个属性绑定(bind)到包含 TextBox 的 DataGridTemplateColumn。

我有一个名为 HST 的专栏。在该列中,我希望用户输入一个公式,当焦点离开或该列不再处于编辑状态时,将显示该值,与 MS excel 类似的行为。

我有两个属性,其中存储了公式,以及存储了公式中的值。

 public String SubTotal
{
get
{
String[] l_ComputeArr = l_HST.Split('=');
if (l_ComputeArr.Length > 1)
{
DataTable dt = new DataTable();
try
{
var v = dt.Compute(l_ComputeArr[1], "");
l_SubTotal = v.ToString();
}
catch
{

}

}
return l_SubTotal;
}
set
{
if (l_SubTotal != value)
{
l_SubTotal = value;
}
RaisePropertyChanged("SubTotal");
}
}
public String HST
{
get { return l_HST; }
set
{
if (l_HST != value)
{
l_HST = value;
}
RaisePropertyChanged("HST");
RaisePropertyChanged("SubTotal");
}
}

小计有值,HST 有公式

我想隐藏 HST 并与 MS Excel 具有类似的行为,其中在编辑小计时显示公式,并在编辑完成后显示值

enter image description here

我有一个名为 observable object 的类,我的 viewmodels 继承自该类。

这个类有一个方法 RaisePropertyChanged,它更新 View 元素。
 public abstract class ObservableObject: INotifyPropertyChanged
{

[field: NonSerialized]
public event PropertyChangedEventHandler PropertyChanged;

protected virtual void OnPropertyChanged(PropertyChangedEventArgs e)
{
var handler = this.PropertyChanged;
if (handler != null)
{
handler(this, e);
}
}

protected void RaisePropertyChanged<T>(Expression<Func<T>> propertyExpresssion)
{
var propertyName = PropertySupport.ExtractPropertyName(propertyExpresssion);
this.RaisePropertyChanged(propertyName);
}

protected void RaisePropertyChanged(String propertyName)
{
VerifyPropertyName(propertyName);
OnPropertyChanged(new PropertyChangedEventArgs(propertyName));
}

/// <summary>
/// Warns the developer if this Object does not have a public property with
/// the specified name. This method does not exist in a Release build.
/// </summary>
[Conditional("DEBUG")]
[DebuggerStepThrough]
public void VerifyPropertyName(String propertyName)
{
// verify that the property name matches a real,
// public, instance property on this Object.
if (TypeDescriptor.GetProperties(this)[propertyName] == null)
{
Debug.Fail("Invalid property name: " + propertyName);
}
}
}

我的问题:

我想在我的数据网格上有类似的 ms excel 行为。

我的意思是,我不希望有一个单独的列显示公式与显示表达式/公式的评估的列

在 ms excel 中,一列在处于编辑状态时显示表达式/公式,并在处于 View 状态时显示该表达式的值。

最佳答案

<DataGrid.Columns>
<DataGridTemplateColumn>
<!--
Template used when cell is in editing state.
HST appears to be your formula.
-->
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<TextBox Text="{Binding HST}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

<!--
Template used when cell is not in editing state.
-->
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Subtotal}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
</DataGrid.Columns>

关于c# - 将两个属性绑定(bind)到 DataGridTemplateColumn TextBox WPF MVVM,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47271287/

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