【问题标题】:How can I change textblock.Text from another class?如何从另一个类更改 textblock.Text?
【发布时间】:2022-06-23 01:38:41
【问题描述】:

我有一个带有文本块的 UserControl elem,我想从 MainWindow 更改其中的文本 用户控件类:

public void textBlockFilling(long id)
        {

            var selectedProducts = from p in db.Products
                                   where p.ProductID == id
                                   select p;

            IEnumerable<TypesOfProduct> type = GetType(id);
            textBlockName.Text = textBlockName.Text.Split(':')[0];
            textBlockName.Text += ": " + selectedProducts.First().ProductName;
}

主窗口:

 void SearchString_OnSelect(object sender, SelectionChanged e)
        {
            if (e.Value != null)
            {
                Product product = e.Value as Product;

                ProductsView pa = new ProductsView();
                pa.textBlockFilling(product.ProductID);

            }
        }

但文字没有改变 -_-; 然后我找到了另一种方法: UC班:

  private delegate void NameCallBack(long varText);
        public void UpdateTextBox(long input)
        {
            db = new ApplicationContext();

            if (!Dispatcher.CheckAccess())
            {
                    textBlockName.Dispatcher.BeginInvoke(new NameCallBack(UpdateTextBox), new object[] { input });
            }
            else
            {
                if (db.Products == null) return;
                var selectedProducts = from p in db.Products
                                       where p.ProductID == input
                                       select p;
                textBlockName.Text = textBlockName.Text.Split(':')[0];
                textBlockName.Text =  ": " + selectedProducts.First().ProductName;
            }
        }

主窗口:

 public static readonly ProductsView ProductsLogWindow = new ProductsView();
        void SearchString_OnSelect(object sender, SelectionChanged e)
        {
            if (e.Value != null)
            {
                Product product = e.Value as Product;

                ProductsLogWindow.textBlockFilling(product.ProductID);
            }
        }

但它仍然没有工作。你能解释一下我做错了什么吗?

【问题讨论】:

    标签: c# wpf


    【解决方案1】:

    这段代码:

    ProductsView pa = new ProductsView();
    pa.textBlockFilling(product.ProductID);
    

    创建 ProductsView 的新实例,更改其属性,然后将其丢弃。

    您应该使用添加到 MainWindow 界面的 ProductsView:

    <Window ...>
        <Grid>
            <controls:ProductsView Name="productView"/>
        </Grid>
    </Window>
    
    void SearchString_OnSelect(object sender, SelectionChanged e)
    {
        if (e.Value != null)
        {
            Product product = e.Value as Product;
    
            productView.textBlockFilling(product.ProductID);
        }
    }
    

    我也不清楚为什么您使用 product.ProductID 搜索产品然后获取 ProductName,而不是直接使用 ProductName:

    productView.textBlockFilling(product.ProductName);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多