代码之家  ›  专栏  ›  技术社区  ›  Ran_TH

管理wpf组合框项中的数据值

  •  0
  • Ran_TH  · 技术社区  · 7 年前

    我有一个wpf组合框,用户必须在其中选择纸张大小。 例如,CMB U PaperSize有一个纸张大小的子项集合:

    A3-297x420毫米

    F4-215x330毫米

    等。。。

    此组合框输入将链接到确定纸张大小的方法。

    通常,我会使用select…case比较组合框项索引并设置变量:

    Private Sub SetPaperSize()
        Select Case cmb_papersize.SelectedIndex
            Case 0
               PageWidth = 297
               PageHeight = 420
            Case 1
               PageWidth = 215
               PageHeight = 330
           'etc....
        End Select
    End Sub
    

    不过,我很好奇是否有更优雅的方式来做到这一点?对于select…case,管理两个变量可能很简单,但是我计划添加更多的变量,如度量单位、边距等。特别是如果我想增加更多的纸张大小,每个大小肯定有不同的价值。

    我正在考虑使用属性或数组,将数据放在不同的类中,等等…但我不知道该怎么做。

    1 回复  |  直到 7 年前
        1
  •  1
  •   jmcilhinney    7 年前

    根据我上面的评论:

    您可以将控件绑定到具有(至少)两个 财产。你设置了 DisplayMemberPath 以…的名义 要在控件和 SelectedValuePath 到要通过 SelectedValue . 如果后一个属性包含宽度和高度组件, 您可以从 选定值 的 控件,获取宽度和高度组件并直接指定它们 不需要任何 If 属于 Select Case 是的。你可以用一个 System.Windows.Size 价值。

    下面是一个简单的例子:

    Class MainWindow
        Private Sub MainWindow_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded
            Dim items As New List(Of PaperSize) From {New PaperSize With {.Name = "A3", .Dimensions = New Size(297, 420)},
                                                      New PaperSize With {.Name = "F4", .Dimensions = New Size(215, 330)}}
    
            With cmb_papersize
                .SelectedValuePath = "Dimensions"
                .ItemsSource = items
            End With
        End Sub
    
        Private Sub Button1_Click(sender As Object, e As RoutedEventArgs)
            Dim dimensions = DirectCast(cmb_papersize.SelectedValue, Size)
            Dim pageWidth = dimensions.Width
            Dim pageHeight = dimensions.Height
    
            MessageBox.Show($"Page dimensions: {pageWidth} by {pageHeight}")
        End Sub
    End Class
    
    
    Friend Class PaperSize
    
        Public Property Name As String
        Public Property Dimensions As Size
    
        Public Overrides Function ToString() As String
            Return $"{Name} - {Dimensions.Width}x{Dimensions.Height} mm"
        End Function
    
    End Class
    

    注意,因为我没有设置 显示成员路径 ,控件显示调用的结果 ToString 在每个项目上,这是重写的原因 弦线 PaperSize 上课。

    推荐文章