Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 来自视图模型的条件绑定?_C#_Wpf - Fatal编程技术网

C# 来自视图模型的条件绑定?

C# 来自视图模型的条件绑定?,c#,wpf,C#,Wpf,我有几个列表视图,其中有两个collumn,如。 我正在为另一个应用程序构建统计应用程序。 每行应该有两列。 (姓名、总数)或(姓名、计数) 问题是模型有三个(Name、Sum、Count),我希望有一个通用的开关来确定在所有6个ListView中应该显示哪一列。有什么解决办法吗 您可以为ListView使用样式,并且仅添加所需的列,具体取决于显示所需视图的属性 CountSumSwitch是我在MainWindow中拥有的一个布尔依赖属性,您可以将其切换为true以在所有ListView中显示

我有几个列表视图,其中有两个collumn,如。
我正在为另一个应用程序构建统计应用程序。
每行应该有两列。 (姓名、总数)或(姓名、计数)

问题是模型有三个(Name、Sum、Count),我希望有一个通用的开关来确定在所有6个ListView中应该显示哪一列。有什么解决办法吗

您可以为ListView使用样式,并且仅添加所需的列,具体取决于显示所需视图的属性

CountSumSwitch是我在MainWindow中拥有的一个布尔依赖属性,您可以将其切换为true以在所有ListView中显示计数,将其切换为false以在所有ListView中显示总和

     <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>

编辑:

为了在操作中显示这一点,我将添加一个示例,它显示绑定到集合的listview,并带有一个复选框来切换所使用的列。创建一个新的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; }
        }
    }
公共部分类主窗口:窗口
{
公共布尔计数开关
{
获取{return(bool)GetValue(CountSumSwitchProperty);}
set{SetValue(CountSumSwitchProperty,value);}
}
public static readonly dependencProperty CountSumSwitchProperty=dependencProperty.Register(“CountSumSwitch”、typeof(bool)、typeof(MainWindow)、new UIPropertyMetadata(false));
公共清单项目
{
获取{return(List)GetValue(ITemsProperty);}
set{SetValue(ITemsProperty,value);}
}
public static readonly dependencProperty ITemsProperty=dependencProperty.Register(“ITems”、typeof(List)、typeof(main window)、new-UIPropertyMetadata(null));
公共主窗口()
{
初始化组件();
随机rnd=新随机();
项目=新列表(新项目[]
{
新的ITEEM(){Name=“Item 1”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 2”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 3”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 4”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 5”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 6”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 7”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 8”,Count=rnd.Next(100),Sum=rnd.Next(100)},
新的ITEEM(){Name=“Item 9”,Count=rnd.Next(100),Sum=rnd.Next(100)},
});
CountSumSwitch=false;
}
公开课
{
公共字符串名称{get;set;}
公共整数计数{get;set;}
公共整数和{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>


为您的ListView实现不同的,并根据您的目的进行切换

我不确定这是否值得对我所看到的进行一次彻底的检查,但有一点修改。。数据触发器是我的关键。。谢谢,我试试看