7

Expression BlendのListViewデザインに、思ったより難しい問題があります。

XAMLを使用して画面を描画したいだけです。これはアプリケーション内では実行されません。ExpressionBlendのデザインウィンドウで表示するためにレンダリングする必要がある静的なデザインスタディです。

私はこれまでにこれを持っています:

<ListView x:Name="examList" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date" Width="Auto"/>
            <GridViewColumn Header="Setup" Width="Auto"/>
            <GridViewColumn Header="Protocol" Width="Auto" />
            <GridViewColumn Header="Channels" Width="Auto"/>
            <GridViewColumn Header="Duration" Width="Auto"/>
        </GridView>
    </ListView.View>

    <ListViewItem>
        <TextBlock Text="stuff" />  <!-- what should I put here??? -->
    </ListViewItem>
</ListView>

問題は次のとおりです。各フィールド(GridViewの各列)に1つの文字列または数値を使用してListViewItemsを作成する方法がわかりません。

コードビハインドの有無にかかわらず、助けていただければ幸いですが、ワークフローに必要な要件は、アプリケーションを実行しなくても、デザイン時にExpression Blend内でレンダリングされること、できればデータが別のファイルからバインドされていないことです。しかし、XAMLに直接手作業で入力しました(私はそれを気にしません、実際に私はそれを望んでいます)。

私はこの答えを見つけました、しかしそれは私が必要とすることをしません、と私は思います。

読んでくれてありがとう!

4

2 に答える 2

8

内部で文字列配列をListViewItem使用し、を使用して、DisplayMemberBindingどのインデックスをどの列に表示するかを指定できます。

<ListView x:Name="examList" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date" Width="Auto" 
                            DisplayMemberBinding="{Binding [0]}"/>
            <GridViewColumn Header="Setup" Width="Auto" 
                            DisplayMemberBinding="{Binding [1]}"/>
            <GridViewColumn Header="Protocol" Width="Auto" 
                            DisplayMemberBinding="{Binding [2]}"/>
            <GridViewColumn Header="Channels" Width="Auto" 
                            DisplayMemberBinding="{Binding [3]}" />
            <GridViewColumn Header="Duration" Width="Auto" 
                            DisplayMemberBinding="{Binding [4]}"/>
        </GridView>
    </ListView.View>

    <ListViewItem>
        <x:Array Type="{x:Type sys:String}">
                <sys:String>This is Date</sys:String>
                <sys:String>This is Setup</sys:String>
                <sys:String>This is Protocol</sys:String>
                <sys:String>This is Channels</sys:String>
                <sys:String>This is Duration</sys:String>
            </x:Array>        
    </ListViewItem>
</ListView>

どこsys:にありますかxmlns:sys="clr-namespace:System;assembly=mscorlib"

または、値を保持する独自のデータ型を作成できます。

public class Exam
{
    public string Date { get; set; }

    public string Setup { get; set; }

    //...
}

そしてそれをで使用してListViewItemください:

<ListView x:Name="examList" SelectionMode="Single">
    <ListView.View>
        <GridView>
            <GridViewColumn Header="Date" Width="Auto" 
                            DisplayMemberBinding="{Binding Date}"/>
            <GridViewColumn Header="Setup" Width="Auto" 
                            DisplayMemberBinding="{Binding Setup}"/>    
        </GridView>
    </ListView.View>

    <ListViewItem>
        <local:Exam Date="2001/1/1" Setup="Some setup" />
    </ListViewItem>
</ListView>

クラスの名前空間local:を指す場所。Exam

于 2012-08-17T21:07:41.750 に答える
4

「[0]」のようなインデックスバインディングが必要です。

<Grid>
    <ListView x:Name="lv" />
</Grid>



lv.Items.Clear();
var gv = new GridView();
lv.View = gv;

var columns = new List<string> { "Date", "Setup", "Protocol", "Channels", "Duration" };
for(int index = 0; index < columns.Count; index++)
{
    gv.Columns.Add(new GridViewColumn
    {
        Header = columns[index],
        DisplayMemberBinding = new Binding("[" + index.ToString() + "]")
    });
}

// Populate list
var row1 = new List<string> { "Date1", "Setup1", "Protocol1", "Channels1", "Duration1" };
var row2 = new List<string> { "Date2", "Setup2", "Protocol2", "Channels2", "Duration2" };
lv.Items.Add(row1);
lv.Items.Add(row2);
于 2017-03-27T02:50:02.023 に答える