我正在使用MVVM模式在WPF桌面应用程序上工作。 我想基于在TextBox键入的文本筛选ListView的一些项目。 我希望ListView项目被过滤,因为我改变了文本。 我想知道如何在filter文本更改时触发filter。 ListView绑定到一个CollectionViewSource ,绑定到ViewModel上的ObservableCollection 。 filter文本的TextBox绑定到ViewModel上的一个string,它应该是UpdateSourceTrigger=PropertyChanged 。 <CollectionViewSource x:Key="ProjectsCollection" Source="{Binding Path=AllProjects}" Filter="CollectionViewSource_Filter" /> <TextBox Text="{Binding Path=FilterText, UpdateSourceTrigger=PropertyChanged}" /> <ListView DataContext="{StaticResource ProjectsCollection}" ItemsSource="{Binding}" /> Filter="CollectionViewSource_Filter"链接到后面的代码中的事件处理程序,它只是在ViewModel上调用filter方法。 当FilterText的值发生变化时进行筛选 – FilterText属性的setter调用一个FilterList方法,该方法遍历ViewModel中的ObservableCollection ,并在每个ViewModel项上设置一个boolean FilteredOut属性。 我知道FilteredOut属性在filter文本更改时更新,但List不刷新。 CollectionViewSourcefilter事件只有在重新加载UserControl的时候才会被触发。 我已经尝试更新filter信息后调用OnPropertyChanged("AllProjects") ,但它并没有解决我的问题。 (“AllProjects”是我的ViewModel的CollectionViewSource绑定的ObservableCollection属性。) 当FilterText TextBox的值发生变化时,如何让CollectionViewSource重新进行自我刷新? 非常感谢
我在Canvas里面有一个Grid像这样定义: <Canvas x:Name="outerCanvas"> <Grid Grid.Row="1" Name="cGrid" ShowGridLines="True" Width="{Binding Path=ActualWidth, RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}" Height="{Binding Path=ActualHeight, RelativeSource={RelativeSource AncestorType={x:Type Canvas}}}"> <Grid.ColumnDefinitions> <ColumnDefinition /> <ColumnDefinition/> <ColumnDefinition/> </Grid.ColumnDefinitions> <Grid.RowDefinitions> <RowDefinition /> <RowDefinition /> </Grid.RowDefinitions> <Rectangle Name="rectangle1" Stroke="Black" Fill="AntiqueWhite" /> <Rectangle Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="1" Grid.RowSpan="1" Name="rectangle2" Stroke="Black" Fill="AliceBlue" /> <Rectangle Grid.Row="0" Grid.Column="2" Grid.ColumnSpan="1" Grid.RowSpan="1" Name="rectangle3" Stroke="Black" Fill="Aqua" /> <Rectangle Grid.Row="1" Grid.Column="0" […]
我在我的应用程序中使用Page作为登陆屏幕。 XAML看起来像这样: <Grid x:Name="LayoutRoot"> <Grid> <Grid.RowDefinitions> <RowDefinition Height="3*"/> <RowDefinition Height="Auto"/> <RowDefinition Height="Auto"/> <RowDefinition Height="7*"/> </Grid.RowDefinitions> <Rectangle StrokeThickness="0" Fill="#FF79D2F4" Margin="0,0,0,-10" Grid.RowSpan="2"/> <Rectangle StrokeThickness="0" Fill="#FF1F8CC5" Margin="0,-10,0,0" Grid.Row="2" Grid.RowSpan="2"/> <Image Source="ms-appx:///Assets/ViewMedia/Banners/Banner_Light_Big.jpg" Grid.Row="1" Grid.RowSpan="2"/> <Rectangle StrokeThickness="0" Grid.Row="2" Grid.RowSpan="2"> <Rectangle.Fill> <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0"> <GradientStop Offset="0"/> <GradientStop Color="#7F000000" Offset="1"/> </LinearGradientBrush> </Rectangle.Fill> </Rectangle> </Grid> <StackPanel MaxWidth="300" Margin="20,35" HorizontalAlignment="Stretch" VerticalAlignment="Bottom"> <Button x:Name="LoginButton" x:Uid="LoginButton" […]
我添加了一个DockPanel到RadioButton元素,这样我就可以使用100%的宽度水平分配单选button标签,文本框和button。 在DockPanel中使用LastChildFill="True"可以延伸最后一个元素。 如果文本框是面板中的最后一个孩子,这很好地工作。 但是,由于button是最后一个元素并且具有固定的宽度,所以文本框应该被拉伸。 但是,没有像2ndChildFill="True"这样的属性。 我的代码如下所示: <RadioButton HorizontalAlignment="Stretch" HorizontalContentAlignment="Stretch"> <DockPanel > <TextBlock VerticalAlignment="Center">in location:</TextBlock> <TextBox Grid.Column="1" Margin="10,0,0,0">Path string</TextBox> <Button HorizontalAlignment="Right" Margin="10,0,0,0" Padding="3,0">…</Button> </DockPanel> </RadioButton> 它给了我这个: 任何想法,提示来解决这个问题? 提前谢谢了…
我正在Windows Phone 8上使用LongListSelector控件,无法找出最好的方法来处理一个项目的水龙头。 我发现的几个例子依赖于SelectionChanged事件。 但是,这个解决方法是错误的,因为如果我点击打开一个新页面的项目,回来,然后再次点击相同的项目,它不会工作,因为这个项目已被选中,所以SelectionChanged不会被触发。 我尝试注册到轻击事件,并使用当前select的项目作为轻敲的项目,但有时候当前select的项目不是我所期望的。 我可以把我的ItemTemplate包装在一个button中,并处理每个项目的水龙头,但我需要reskinbutton,使它看起来像一个简单的列表项。 最后,我不明白为什么要实现这样一个基本的事情是如此复杂。 有没有一个简单而标准的方式,我错过了? 我的第二个愿望是当它被挖掘时对物品产生影响。 有没有什么标准的方法来做到这一点?
我在网上find的所有设置Z-Index的文档和示例都使用了一个Canvas元素作为容器。 我的项目是在一个DataTemplate的ItemsControl容器内的边界元素。 我使用MouseEnter和MouseLeave事件来触发ScaleTransform.ScaleX和ScaleTransform.ScaleY上的animation,以便它们在徘徊时增长。 由于它们被resize并与容器中的其他项目占据相同的空间,所以最近添加的项目与旧项目(与当前resize的项目相对)重叠。 有没有一种清洁的方式,使我的animation在代码中向前移动当前项目,以便在resize时重叠所有其他项目?
给出以下代码: <MenuItem x:Name="MenuItem_Root" Header="Root"> <MenuItem x:Name="MenuItem_Item1" IsCheckable="True" Header="item1" /> <MenuItem x:Name="MenuItem_Item2" IsCheckable="True" Header="item2"/> <MenuItem x:Name="MenuItem_Item3" IsCheckable="True" Header="item3"/> </MenuItem> 在XAML中,是否有创build可互相排斥的可检查菜单项的方法? 用户在哪里检查项目2,项目1和3自动取消选中。 我可以通过监视菜单上的点击事件,确定哪个项目被检查,并取消选中其他菜单项来完成代码。 我想有一个更简单的方法。 有任何想法吗?
我在我的XAML文件中有以下(简化)部分: <Menu Width="Auto" Height="20" Background="#FFA9D1F4" DockPanel.Dock="Top"> <MenuItem Header="File"> <MenuItem Header="Exit"/> </MenuItem> <MenuItem Header="Edit"> <MenuItem Header="Cut"/> </MenuItem> <MenuItem Header="Help"> <MenuItem Header="About"/> </MenuItem> </Menu> 结果是: +——————————————-+ | File Edit Help | +——————————————-+ | | 如果我想要右侧的Help菜单项,我需要做什么: +——————————————-+ | File Edit Help | +——————————————-+ | |
我需要对ListBox的string进行sorting,但是通过DataContext将其绑定到另一个组件的视图模型。 所以我不能在XAML中直接实例化视图模型,就像在这个使用ObjectDataProvider 例子中一样 。 在我的XAML中: <ListBox ItemsSource="{Binding CollectionOfStrings}" /> 在我看来的模型中: public ObservableCollection<string> CollectionOfStrings { get { return collectionOfStrings; } } 在另一个组件中: view.DataContext = new ViewModel(); 没有代码背后! 因此,使用纯粹的XAML,我将如何sorting列表框中的项目? 同样,XAML不拥有视图模型的实例化。
我已经完成了.Net开发一段时间,但我是新来的WPF技术。 App.xaml的预期目的是什么? 另外, 你通常会把什么types的xaml代码放进去? 对于简单的应用程序来说,它似乎可以忽略不计。 这是真的?