C# 来自视图模型的条件绑定?
我有几个列表视图,其中有两个collumn,如。C# 来自视图模型的条件绑定?,c#,wpf,C#,Wpf,我有几个列表视图,其中有两个collumn,如。 我正在为另一个应用程序构建统计应用程序。 每行应该有两列。 (姓名、总数)或(姓名、计数) 问题是模型有三个(Name、Sum、Count),我希望有一个通用的开关来确定在所有6个ListView中应该显示哪一列。有什么解决办法吗 您可以为ListView使用样式,并且仅添加所需的列,具体取决于显示所需视图的属性 CountSumSwitch是我在MainWindow中拥有的一个布尔依赖属性,您可以将其切换为true以在所有ListView中显示
我正在为另一个应用程序构建统计应用程序。
每行应该有两列。 (姓名、总数)或(姓名、计数)
问题是模型有三个(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实现不同的,并根据您的目的进行切换 我不确定这是否值得对我所看到的进行一次彻底的检查,但有一点修改。。数据触发器是我的关键。。谢谢,我试试看