【问题标题】:Populate textbox values based on a list根据列表填充文本框值
【发布时间】:2015-10-28 14:30:36
【问题描述】:

对于最小值和最大值,我需要调用大约 50 条不同的数据。我确信有比执行以下操作更好的方法:

 public void refreshminmaxvalues(List<minmaxvalues> listminmaxvalues)
    {
        txtMinA_1.Text = minmaxvalueslist[0].minvalue.ToString();
        txtMaxA_1.Text = minmaxvalueslist[0].maxvalue.ToString();
        txtMinB_1.Text = minmaxvalueslist[0].minvalueB.ToString();
        txtMaxB_1.Text = minmaxvalueslist[0].maxvalueB.ToString();
        txtMin_2.Text = minmaxvalueslist[1].minvalue.ToString();
        txtMax_2.Text = minmaxvalueslist[1].maxvalue.ToString();

    }

上面的代码从一个列表中获取最小值和最大值。 MinAMinB 是两个链接在一起的值,因此它们的调用方式与其他值不同。 txtMax_2 之后的所有内容都只有一个最小值和一个最大值。

有没有人知道更好、更“高效”的代码编写方式,而不是仅仅写出所有 50 多个值?

如果有帮助,这些是在 XAML 中编辑的值:

          <!-- Minimum -->
        <TextBox Name="txtMinA_1" Text=""/>
        <TextBox Name="txtMinB_1" Text=""/>
        <TextBox Name="txtMin_2" Text=""/>
        <TextBox Name="txtMin_3" Text=""/>
        <TextBox Name="txtMin_4" Text=""/>

         <!-- Maximum -->
        <TextBox Name="txtMaxA_1" Text=""/>
        <TextBox Name="txtMaxB_1" Text=""/>
        <TextBox Name="txtMax_2" Text=""/>
        <TextBox Name="txtMax_3" Text=""/>
        <TextBox Name="txtMaxH_4" Text=""/>

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    如果您确切知道返回了多少条数据,那么您应该改用模型和数据绑定。

    例如:

    YourXaml.xaml

    编辑:在 DLeh 的回答中使用 ItemsTemplateSelector,但我的其他内容仍然有意义并且是相关的。

     <TextBox Name="txtMinA_1" Text="{Binding txtMinA_1.minvalue"/>
     <TextBox Name="txtMinA_1" Text="{Binding txtMinB_1.maxvalue"/>
     ect...
    

    YourXaml.xaml.cs

    public class YourXaml{
         public YourXaml(){
            this.DataContext = new YourViewModel();
         }
    }
    

    YourViewModel.cs

    public YourViewModel{
        private minmaxvalues _txtMinA_1;
        private minmaxvalues _txtMinB_1;
    
        public minmaxvalues txtMinA_1
        { 
           get{ return _txtMinA_1; }
           set{ _txtMinA_1 = value; }
        }
        public minmaxvalues txtMinB_1
        { 
           get{ return _txtMinB_1; }
           set{ _txtMinB_1= value; }
        }
    
    }
    

    通过使用此结构,您可以将视图 (YourXaml.xaml) 与模型和视图模型中的数据分离。这是在 WPF 中工作的一种更高效且行业接受的方式。

    To learn more about MVVM go here. 您将希望了解这一点以及 DataBinding 是什么。

    【讨论】:

      【解决方案2】:

      您应该能够使用 ItemsControl 并绑定到它:

      <ItemsControl x:Name="Mins">
          <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <TextBox Text="{Binding minvalue}"></TextBox>
                  <TextBox Text="{Binding minvalueB}"></TextBox>
              </DataTemplate>
          </ItemsControl.ItemTemplate>
      </ItemsControl>
      <ItemsControl x:Name="Maxes">
          <ItemsControl.ItemTemplate>
              <DataTemplate>
                  <TextBox Text="{Binding maxvalue}"></TextBox>
                  <TextBox Text="{Binding maxvalueB}"></TextBox>
              </DataTemplate>
          </ItemsControl.ItemTemplate>
      </ItemsControl>
      

      你可以像这样绑定一个类型:

      Mins.ItemsSource = listminmaxvalues;
      Maxes.ItemsSource = listminmaxvalues;
      

      更多信息:WPF Repeater (like) control for collection source?

      【讨论】:

      • 我比我更喜欢你的回答,但是 OP 需要知道什么是数据绑定
      • 如果他要在 WPF 中开发,他应该这样做,但这有点超出了这个问题的范围。
      • 我不这么认为。我们的两个答案都使用数据绑定,而在他最初的问题中他根本没有。如果他实施您的答案,它将无法正常工作。这不是一个完整的解决方案。
      • 因为我直接在代码隐藏中设置ItemsSource,而不是使用视图模型作为父DataContext,所以这应该是一个完整的解决方案。
      • @Badja 如果您很难使用正在编写的代码添加数据绑定,那么您需要重新评估您的架构。我编写了极其复杂的 WPF 应用程序,它们越复杂,数据绑定的效果就越好。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 2019-09-17
      • 1970-01-01
      • 2021-08-20
      • 2023-03-14
      • 2019-07-28
      • 2021-12-04
      相关资源
      最近更新 更多