为了账号安全,请及时绑定邮箱和手机立即绑定

将属性绑定到数据网格上的文本框,在 setter 例程后不显示值

将属性绑定到数据网格上的文本框,在 setter 例程后不显示值

C#
白衣非少年 2022-08-20 16:25:44
绑定到文本框不显示属性实际值。setter 上的值有一些要休留的规则,并且值的文本框输入不起作用。我试图在key_up上实现一些例程,但没有成功public partial class MainWindow : Window{    public MainWindow()    {        InitializeComponent();    }    private ObservableCollection<model> ProdList = new ObservableCollection<model>();    private void NumberValidationTextBox(object sender, TextCompositionEventArgs e)    {        Regex regex = new Regex("[^0-9]+");        e.Handled = regex.IsMatch(e.Text);    }    private void dgcQtdPedida_KeyUp(object sender, KeyEventArgs e)    {        var t = (ClickSelectTextBox)sender;        if (string.IsNullOrWhiteSpace(t.Text))        {            t.Text = "0";        }    }    private void dgcQtdPedida_KeyDown(object sender, KeyEventArgs e)    {    }    private void dgcQtdPedida_LostFocus(object sender, RoutedEventArgs e)    {    }    private void Window_Loaded(object sender, RoutedEventArgs e)    {        PedDataGrid.ItemsSource = null;        ProdList.Add(new model()        {            ProdCodBI = 1,            Mandatory = true,            QtdMin = 3        });        ProdList.Add(new model()        {            ProdCodBI = 2,            Mandatory = false,            QtdMin = 2        });        ProdList.Add(new model()        {            ProdCodBI = 3,            Mandatory = false,            QtdMin = 0        });        PedDataGrid.ItemsSource = ProdList;        PedDataGrid.Items.Refresh();        PedDataGrid.UpdateLayout();    }}    //model    public long ProdCodBI { get; set; }    public bool Mandatory { get; set; }    public long? QtdMin { get; set; }    private long? _QtdPed { get; set; }    public long QtdPed    {        get        {            long qtdp = _QtdPed ?? 0;            if (Mandatory || qtdp > 0)            {                if (qtdp < (QtdMin ?? 1))                {                    qtdp = QtdMin ?? 1;                }            }当值不满足要求时,消息框会通知,并且文本框中会填充_QtdPed。上面的代码只是一个更大图景的复制品。但体验是一样的。有时文本框中会填充正确的值...由于某种原因,当焦点放在单元格上时,该值会更新...
查看完整描述

1 回答

?
饮歌长啸

TA贡献1951条经验 获得超3个赞

找到一个修复错误行为的例程。


public long QtdPed

    {

        get

        {

            if (_QtdPed == null)

            {

                if (Mandatory && (QtdMin ?? 0) > 0)

                {

                    _QtdPed = QtdMin;

                }

            }

            return _QtdPed ?? 0;

        }

        set

        {

            _QtdPed = value;

            UpdatePrice();

        }

    }


    public void ChangeQtd(long value)

    {

        if (Mandatory || value > 0)

        {

            if (value < (QtdMin ?? 1))

            {

                if (Mandatory && value == 0)

                {

                    MessageBox.Show("Mandatory");

                }

                else

                {

                    MessageBox.Show("Less than min (" + (QtdMin ?? 1) + ")...");

                }

                value = QtdMin ?? 1;

            }

        }

        QtdPed = value;

    }

主窗口


    private void dgcQtdPedida_KeyUp(object sender, KeyEventArgs e)

    {

    }



    private void dgcQtdPedida_LostFocus(object sender, RoutedEventArgs e)

    {

        var t = (ClickSelectTextBox)sender;

        if (string.IsNullOrWhiteSpace(t.Text))

        {

            t.Text = "0";

        }

        model obj = ((FrameworkElement)sender).DataContext as model;


        obj.ChangeQtd(long.Parse(t.Text));


        PedDataGrid.Items.Refresh();

    }


查看完整回答
反对 回复 2022-08-20
  • 1 回答
  • 0 关注
  • 138 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号