Wpf 基于属性值将ObservableCollection绑定到Listbox
我的模型是这样的:Wpf 基于属性值将ObservableCollection绑定到Listbox,wpf,listview,data-binding,Wpf,Listview,Data Binding,我的模型是这样的: public class MyModel { public string Title { get; set; } public string BriefDescription { get; set; } public bool IsDirty { get; set; } } <ListView Name="lvwAvailableCollection" Grid.Row="0" Grid.Column="0" ItemsSource=
public class MyModel
{
public string Title { get; set; }
public string BriefDescription { get; set; }
public bool IsDirty { get; set; }
}
<ListView Name="lvwAvailableCollection" Grid.Row="0" Grid.Column="0" ItemsSource="{Binding Path=MyCollection}" IsSynchronizedWithCurrentItem="True" AlternationCount="2" MaxHeight="300" >
<ListView.View>
<GridView>
<GridViewColumn Width="175" Header="Title" DisplayMemberBinding="{Binding Title}" />
<GridViewColumn Width="200" Header="Description" DisplayMemberBinding="{Binding BriefDescription}" />
</GridView>
</ListView.View>
</ListView>
我在我的ViewModel
中有一个属性,我正在用它投标ListBox
public ObservableCollection<ROCategoryModel> MyCollection { get; set; }
这在CollectionViewSources和几个非常小的代码隐藏事件处理程序中是可行的。主要基于Laurent Bugnon的帖子: XAML:
这在CollectionViewSources和几个非常小的代码隐藏事件处理程序中是可行的。主要基于Laurent Bugnon的帖子: XAML:
基于“IsDirty”属性在列表框中显示和隐藏项目如何?这样可以吗?基于“IsDirty”属性在列表框中显示和隐藏项目如何?这样可以吗?基于“IsDirty”属性在列表框中显示和隐藏项目如何?这对你合适吗?这必须是代码隐藏吗?我可以不将其放在ViewModel中吗?可以,但这可能会带来更大的麻烦:。是否必须将其放在代码隐藏中?我可以不将其放在ViewModel中吗?可以,但这可能会带来更大的麻烦:。是否必须将其放在代码隐藏中?我可以不把它放在ViewModel中吗?你可以,但这可能比它的价值更麻烦:。
<Window.Resources>
<ResourceDictionary>
<CollectionViewSource x:Key="CleanItems" Filter="CleanItems_Filter" Source="{Binding MyCollection}" />
<CollectionViewSource x:Key="DirtyItems" Filter="DirtyItems_Filter" Source="{Binding MyCollection}" />
</ResourceDictionary>
</Window.Resources>
<Grid x:Name="LayoutRoot">
<Grid.ColumnDefinitions>
<ColumnDefinition />
<ColumnDefinition />
</Grid.ColumnDefinitions>
<ListView Name="lvwAvailableCollectionClean" Grid.Column="0" ItemsSource="{Binding Source={StaticResource CleanItems}}" IsSynchronizedWithCurrentItem="True" AlternationCount="2" MaxHeight="300" >
<ListView.View>
<GridView>
<GridViewColumn Width="175" Header="Title" DisplayMemberBinding="{Binding Title}" />
<GridViewColumn Width="200" Header="Description" DisplayMemberBinding="{Binding BriefDescription}" />
</GridView>
</ListView.View>
</ListView>
<ListView Name="lvwAvailableCollectionDirty" Grid.Column="1" ItemsSource="{Binding Source={StaticResource DirtyItems}}" IsSynchronizedWithCurrentItem="True" AlternationCount="2" MaxHeight="300" >
<ListView.View>
<GridView>
<GridViewColumn Width="175" Header="Title" DisplayMemberBinding="{Binding Title}" />
<GridViewColumn Width="200" Header="Description" DisplayMemberBinding="{Binding BriefDescription}" />
</GridView>
</ListView.View>
</ListView>
</Grid>
private void CleanItems_Filter(object sender, System.Windows.Data.FilterEventArgs e)
{
var item = e.Item as MyModel;
if (!item.IsDirty)
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}
private void DirtyItems_Filter(object sender, System.Windows.Data.FilterEventArgs e)
{
var item = e.Item as MyModel;
if (item.IsDirty)
{
e.Accepted = true;
}
else
{
e.Accepted = false;
}
}