0

のような2つの列を持ついくつかのリストビューがあります。
別のアプリケーションの統計アプリケーションを作成しています。
各行には2つの列が必要です。(Name、Sum)または(Name、Count)
問題は、モデルに3つの(Name、Sum、Count)があることです。また、6つのリストビューすべてに表示する列を決定するための一般的なスイッチが必要です。これに対する解決策はありますか?

4

2 に答える 2

1

ListViewのスタイルを使用して、目的のビューを示すプロパティに応じて、必要な列のみを追加することができます。

CountSumSwitchは、メインウィンドウにあるブール依存関係プロパティです。これをtrueに切り替えると、すべてのリストビューにカウントが表示され、falseに切り替えると、すべてのリストビューに合計が表示されます。

     <Style TargetType="{x:Type ListView}">
        <Style.Triggers>
            <!-- This binding needs to point to some global propery that you'll change to switch views.-->
            <DataTrigger Binding="{Binding CountSumSwitch}" Value="True">
                <Setter Property="View">
                    <Setter.Value>
                        <GridView>
                            <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
                            <GridViewColumn Width="140" Header="Count" DisplayMemberBinding="{Binding Count}" />
                        </GridView>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
            <DataTrigger Binding="{Binding CountSumSwitch}" Value="False">
                <Setter Property="View">
                    <Setter.Value>
                        <GridView>
                            <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
                            <GridViewColumn Width="140" Header="Sum" DisplayMemberBinding="{Binding Sum}" />
                        </GridView>
                    </Setter.Value>
                </Setter>
            </DataTrigger>
        </Style.Triggers>
    </Style>

編集:

これを実際に示すために、例を追加します。これは、使用される列を切り替えるためのチェックボックスを備えたコレクションにバインドされたリストビューを示しています。新しいWPFアプリケーションを作成し、MainWindowクラスをこれに置き換えます

public partial class MainWindow : Window
    {

        public bool CountSumSwitch
        {
            get { return (bool)GetValue(CountSumSwitchProperty); }
            set { SetValue(CountSumSwitchProperty, value); }
        }

        public static readonly DependencyProperty CountSumSwitchProperty = DependencyProperty.Register("CountSumSwitch", typeof(bool), typeof(MainWindow), new UIPropertyMetadata(false));


        public List<TheItem> ITems
        {
            get { return (List<TheItem>)GetValue(ITemsProperty); }
            set { SetValue(ITemsProperty, value); }
        }

        public static readonly DependencyProperty ITemsProperty = DependencyProperty.Register("ITems", typeof(List<TheItem>), typeof(MainWindow), new UIPropertyMetadata(null));


        public MainWindow()
        {
            InitializeComponent();

            Random rnd = new Random();

            ITems = new List<TheItem>(new TheItem[]
            {
                new TheItem () { Name = "Item 1", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 2", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 3", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 4", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 5", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 6", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 7", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 8", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
                new TheItem () { Name = "Item 9", Count = rnd.Next(100), Sum = rnd.Next (100)}, 
            });

            CountSumSwitch = false;
        }

        public class TheItem
        {
            public string Name { get; set; }
            public int Count { get; set; }
            public int Sum { get; set; }
        }
    }

そして、このコードをMainWindow.xamlに配置します

<Window x:Class="WpfApplication6.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        DataContext="{Binding RelativeSource={RelativeSource Self}}"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <Style TargetType="{x:Type ListView}">
            <Style.Triggers>
                <!-- This binding needs to point to some global propery that you'll change to switch views.-->
                <DataTrigger Binding="{Binding CountSumSwitch}" Value="True">
                    <Setter Property="View">
                        <Setter.Value>
                            <GridView>
                                <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
                                <GridViewColumn Width="140" Header="Count" DisplayMemberBinding="{Binding Count}" />
                            </GridView>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
                <DataTrigger Binding="{Binding CountSumSwitch}" Value="False">
                    <Setter Property="View">
                        <Setter.Value>
                            <GridView>
                                <GridViewColumn Width="140" Header="Name" DisplayMemberBinding="{Binding Name}" />
                                <GridViewColumn Width="140" Header="Sum" DisplayMemberBinding="{Binding Sum}" />
                            </GridView>
                        </Setter.Value>
                    </Setter>
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Window.Resources>
    <Grid>
        <CheckBox IsChecked="{Binding CountSumSwitch}"/>
        <ListView ItemsSource="{Binding ITems}" Margin="0,83,0,0"/>
    </Grid>
</Window>
于 2012-06-12T15:42:26.300 に答える
1

リストビューにさまざまなItemTemplateを実装し、目的に応じてそれらを切り替えます。

于 2012-06-12T16:08:20.327 に答える