c# - 属性更改时属性未将值传回文本框的问题

标签 c# .net wpf mvvm

我正在开发一个 WPF 应用程序,并且我有一个文本框(双向)绑定(bind)到我的 View 模型中的一个属性。

我试图阻止用户在这个文本框中输入超过 100 个字符(这是数据库将存储的最大值),所以我写了这个。

public abstract class AppBaseViewModel : ViewModelBase
{
    private String _text;

    public String Text
    {
        get { return _text; }
        set
        {
            _text = CheckTextLength(value, _text);
            OnPropertyChanged("Text");
        }
    }

 private string CheckTextLength(string value, string text)
    {
        if (value.Length < 100)
        {
            return value;
        }
        else
        {
            return text; 
        }
    }
}  

所有这些代码似乎所做的只是将前 100 个字符保存到字段中,但它仍然允许用户继续输入超过 100 个字符......我猜这是因为字段值没有被传递回文本框。

我不明白为什么这不起作用,因为我在不同的应用程序中使用 MVVM Light 的 RaisePropertyChange() 做了类似的事情。

值得注意的是,我无法访问文本框的设计器,因此无法将 .Net 文本框属性设置为最大长度。

编辑:只是为了澄清,我无法查看或编辑 xaml,因为有些人建议我无权访问 XAML 文件(我知道,这很愚蠢)。我们使用的所有绑定(bind)默认都是两种方式

最佳答案

您是否尝试过 TextBox.MaxLength ?

<TextBox MaxLength="100"/>

Gets or sets the maximum number of characters that can be manually entered into the text box.

如果无法访问 XAML,则最终获得对 XAML 的访问权,而不是解析和验证数组的长度并在这里和那里使用子字符串。至少这就是我会为这个简单的问题做的事情,或者与设计师交谈以添加那一小段代码。

更新 1
    public static T GetChildOfType<T>(DependencyObject depObj) where T : DependencyObject
    {
        if (depObj == null) return null;

        for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
        {
            var child = VisualTreeHelper.GetChild(depObj, i);

            var result = (child as T) ?? GetChildOfType<T>(child);
            if (result != null) return result;
        }
        return null;
    }

去拿那个 child 并设置它的MaxLength。这只是对 View 的轻微修改,因此不会影响 MVVM 模式。

关于c# - 属性更改时属性未将值传回文本框的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30707405/

相关文章:

c# - Accord.NET:如何训练 Boost 分类器

c# - 无需 WinAPI 从文件、文件夹或驱动器获取关联图标

C# 属性 AppSettings

WPF DataGrid 为每个列集添加单独的边框

c# - WPF如何有效检测用户 Activity

.net - 加载大量用户控件的性能问题

c# - 当更多字符看起来像时,在 equal() 中获得 true

c# - 用其他子数组替换所有子数组的高效算法

c# - 无法绑定(bind)多部分标识符 "System.Data.DataRowView"

.net - .Net 中的 GPGPU 编程 - Microsoft Accelerator VS OpenCL.net [VS Others]