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

绑定到文本框不显示属性实际值。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。上面的代码只是一个更大图景的复制品。但体验是一样的。有时文本框中会填充正确的值...由于某种原因,当焦点放在单元格上时,该值会更新...

白衣非少年
浏览 139回答 1
1回答

饮歌长啸

找到一个修复错误行为的例程。public long QtdPed&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; get&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (_QtdPed == null)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Mandatory && (QtdMin ?? 0) > 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _QtdPed = QtdMin;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return _QtdPed ?? 0;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; set&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; _QtdPed = value;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; UpdatePrice();&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; public void ChangeQtd(long value)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (Mandatory || value > 0)&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (value < (QtdMin ?? 1))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if (Mandatory && value == 0)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox.Show("Mandatory");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; else&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; MessageBox.Show("Less than min (" + (QtdMin ?? 1) + ")...");&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; value = QtdMin ?? 1;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; QtdPed = value;&nbsp; &nbsp; }主窗口&nbsp; &nbsp; private void dgcQtdPedida_KeyUp(object sender, KeyEventArgs e)&nbsp; &nbsp; {&nbsp; &nbsp; }&nbsp; &nbsp; private void dgcQtdPedida_LostFocus(object sender, RoutedEventArgs e)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; var t = (ClickSelectTextBox)sender;&nbsp; &nbsp; &nbsp; &nbsp; if (string.IsNullOrWhiteSpace(t.Text))&nbsp; &nbsp; &nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; t.Text = "0";&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; model obj = ((FrameworkElement)sender).DataContext as model;&nbsp; &nbsp; &nbsp; &nbsp; obj.ChangeQtd(long.Parse(t.Text));&nbsp; &nbsp; &nbsp; &nbsp; PedDataGrid.Items.Refresh();&nbsp; &nbsp; }
打开App,查看更多内容
随时随地看视频慕课网APP