如何将ComboBoxItem链接到文件

时间:2011-12-28 08:12:02

标签: wpf vb.net

这个问题是我提出的问题的后续问题,并在此处得到解答:How to display XPS document using a selected combobox item

我使用VB 2010创建了一个WPF应用程序。我通过XAML设置了组合框。但是,我似乎无法弄清楚如何将每个项目的值设置为文件路径。

目标是让用户能够从下拉列表中选择项目,然后该选择将在DocumentViewer中打开XPS文件。以下代码由COMPETENT_TECH(感谢)提供给我,以便在DocumentViewer中读取和显示所选组合框的值。

我要打开的文件的路径是C:\ folder \ file.xps

Private Sub Button4_Click(sender As System.Object, e As System.Windows.RoutedEventArgs) Handles Button4.Click

    Try
        Dim sFileName As String

        sFileName = DirectCast(ComboBox1.SelectedValue, String)
        If Not String.IsNullOrEmpty(sFileName) Then
            Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(sFileName, System.IO.FileAccess.Read)

            DocumentViewer1.Document = theDocument.GetFixedDocumentSequence()
        End If
    Catch ex As Exception
        MessageBox.Show("ERROR: " & ex.Message)
    End Try


End Sub

提前感谢您的协助。

更新

这是我正在使用的XAML:

<ComboBox Width="Auto" IsReadOnly="True" IsEditable="True" Name="ComboBox1" Height="Auto" Margin="0" Padding="1" Grid.Column="2"> 
  <ComboBoxItem>123456</ComboBoxItem> 
  <ComboBoxItem>123457</ComboBoxItem> 
  <ComboBoxItem>123458</ComboBoxItem> 
</ComboBox>

2 个答案:

答案 0 :(得分:1)

根据精确指定加载组合框的xaml的方式,您可能希望更改此行:

Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(sFileName, System.IO.FileAccess.Read)

为:

Dim theDocument As New System.Windows.Xps.Packaging.XpsDocument(System.IO.Path.Combine("C:\folder", sFileName & ".xps"), System.IO.FileAccess.Read)

我们在新代码中所做的就是将存储文件的目录与从组合框中检索到的文件名结合起来。

<强>更新

从组合框中检索值的正确方法是:

If ComboBox1.SelectedValue IsNot Nothing Then
    sFileName = DirectCast(ComboBox1.SelectedValue, ComboBoxItem).Content.ToString()
End If

答案 1 :(得分:0)

我强烈建议您将数据绑定 ComboBox 一起使用。

创建类如下的类:

Class XPSDocumentInfo
{
    Public Property Title As String
    Public Property FileName As String
}

创建ObservableCollection(Of XPSDocumentInfo)并将其绑定到 ComboBox ItemsSource

ComboBox 上使用DisplayMemberPath="Title"属性,以便它将使用 Title 属性在下拉列表中显示文本,但由于您绑定了类型 XPSDocumentInfo <的集合 ComboBox SelectedItem 属性,返回类型为 XPSDocumentInfo 的对象。

例如,

sFileName = DirectCast(ComboBox1.SelectedValue, String)

将更改为

sFileName = DirectCast(ComboBox1.SelectedItem, XPSDocumentInfo).FileName