0

たくさんのxmlデータをlistBoxに表示するアプリの作業を最近始めたばかりですが、問題はすべてのxmlアイテムに子の値があるわけではないため(私の問題では、アップロード)、そのlistBoxコードは表示されません。 。

例:

<item>
     <id>1</id>
     <body>Some text</body>
     <upload></upload>
     <created>Some text</created>
</item>

私はデータを取得し、次のようにリストにデータを入力しています。

var data = from query in loadedData.Descendants("item")
                   select new droppedItem
                   {
                       Id = (int)query.Element("id"),
                       Body = (string)query.Element("body"),
                       Upload = (string)query.Element("upload"),
                       Created = (DateTime)ConvertFromUnixTimestamp((double)query.Element("created"))
                   };
        userDrops.ItemsSource = data;

そして私のxamlは次のようになります:

<ListBox Margin="0,0,-12,0" Name="userDrops">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <StackPanel Margin="0,0,0,17" Width="432">
                            <RichTextBox>
                                <Paragraph>
                                    <Run Text="{Binding Body}" FontSize="25" FontFamily="Segoe WP"></Run>
                                </Paragraph>
                                <Paragraph>
                                    <Hyperlink NavigateUri="{Binding Upload}" TargetName="_blank" FontSize="25" FontFamily="Segoe WP">{Binding Upload}</Hyperlink>
                                </Paragraph>
                                <Paragraph>
                                    <Run Text="{Binding Created}" FontFamily="Segoe WP SemiLight"></Run>
                                </Paragraph>
                            </RichTextBox>
                        </StackPanel>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

私がやりたいのは、xml uploadの子が値を保持している場合にのみ、アップロード情報を保持している段落を表示することです。それ以外の場合は、listBoxから削除してください。ただし、基本的なlistBoxテンプレートを変更する方法がわかりません。

どんな助けでも素晴らしいでしょう!

4

1 に答える 1

0

TextBlocksBodyとCreatedの表示に使用してみませんか?真ん中の部分はRichTextBoxです。アップロードが空の場合、可視性コンバーターを使用して非表示/表示を切り替えることができます。

最初にコンバーターをxamlページに含める必要があります。

xmlns:converters="clr-namespace:xxx.Converters;assembly=xxx"

<converters:VisibilityConverter x:Key="visibilityConverter" />

次に、テンプレート内で使用します。

                <StackPanel Margin="40,237,8,326" Width="432" Grid.Row="1"> 
                    <RichTextBox> 
                        <Paragraph> 
                            <Run Text="{Binding Body}" FontSize="25" FontFamily="Segoe WP"></Run> 
                        </Paragraph>
                    </RichTextBox> 
                    <RichTextBox Visibility="{Binding Upload, Converter={StaticResource VisibilityConverter}}">
                        <Paragraph> 
                            <Hyperlink NavigateUri="{Binding Upload}" TargetName="_blank" FontSize="25" FontFamily="Segoe WP">{Binding Upload}</Hyperlink> 
                        </Paragraph>
                    </RichTextBox> 
                        <TextBlock Text="{Binding Created}" FontFamily="Segoe WP SemiLight"/>
                </StackPanel>

コンバーターは次のようになります。

  public class VisibilityConverter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            bool visible = true;

            if (value is bool)
            {
                visible = (bool)value;
            }
            else if (value is int || value is short || value is long)
            {
                visible = 0 != (int)value;
            }
            else if (value is float || value is double)
            {
                visible = 0.0 != (double)value;
            }
            else if (value is string) {
                visible = ((string)value).Length > 0;
            }
            else if (value == null) {
                visible = false;
            }

            if ((string)parameter == "!")
            {
                visible = !visible;
            }

            return visible ? Visibility.Visible : Visibility.Collapsed;
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

値コンバーターの詳細については、こちらをご覧ください

アップデート

App.xamlで、これを実行します。

<Application xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
             xmlns:sg="http://schemas.stargategroup.com.au/2010/xaml/presentation" 
             xmlns:converters="clr-namespace:xxx.Converters"
             x:Class="xxx.Application.App">

    <Application.Resources>
        <ResourceDictionary>
            <converters:VisibilityConverter x:Key="VisibilityConverter" />
于 2012-04-13T06:20:56.117 に答える