将ComboBox的ItemsSource设置为整数数组?
我有一个WPF应用程序与两个DataGrids共享相同的ItemsSource.当我将DataGrid的一个IsReadOnly属性设置为true时,我将无法将记录添加到其他DataGrid.我仍然可以编辑第二个数据网格的内容,但只是无法添加记录.
这是有意的吗?这有什么办法吗?我可以对DataGrid使用IsEnabled ="False",但是我失去了滚动它的能力.
这是设置:
XAML:
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<DataGrid Name="dgA" Grid.Row="0" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" />
<DataGridTextColumn Header="LastName" Binding="{Binding Path=LastName}" />
</DataGrid.Columns>
</DataGrid>
<DataGrid Name="dgB" Grid.Row="1" AutoGenerateColumns="False" IsReadOnly="True">
<DataGrid.Columns>
<DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" />
<DataGridTextColumn Header="LastName" Binding="{Binding Path=LastName}" />
</DataGrid.Columns>
</DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
C#:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
List<Person> persons = new List<Person>();
persons.Add(new Person() { FirstName = "Bob", LastName = "Johnson" });
persons.Add(new Person() { …Run Code Online (Sandbox Code Playgroud) 我有一个GridView,我在代码隐藏中设置ItemsSource.网格中的所有列都在XAML中定义,所有列宽都是"自动".当我最初设置网格的ItemsSource时,列宽正确设置.
现在,根据用户的操作,可以将网格的ItemsSource设置为新的EntityCollection.我注意到的是,列宽仍然与之前的ItemsSource一样.也就是说,当为Grid设置新的ItemsSource时,列宽似乎不会自动调整.代码隐藏或XAML中是否有任何方法可以在设置列宽时强制Grid使用新的ItemsSource?我认为这将是GridView在重置ItemsSource时自动执行的操作.
<ScrollViewer VerticalScrollBarVisibility="Auto">
<ListView>
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn Width="Auto" Header="Status">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image Width="16" Height="16" Source="{Binding Path=Blocking}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="Auto" Header="Title">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock TextTrimming="CharacterEllipsis" Text="{Binding}" />
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
</ScrollViewer>
Run Code Online (Sandbox Code Playgroud) 我有一个ItemsSource绑定到a 的数据网格CollectionViewSource.
在每列中,我指定Path绑定的属性以获取要显示的特定信息.
如果用户想要更多信息,我想要做的是用一个复选框切换一些列.为此,我需要将visibility属性绑定到复选框的值(使用转换器),但我非常确定列的数据上下文是否干扰绑定.
<DataGrid ItemsSource="{Binding Source={StaticResource cvs}}" ....>
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Binding="{Binding Path=FirstName}"
Visibility="{Binding IsChecked,
ElementName=IncludeFullHist,
Converter={StaticResource boolItemsConverter}}"/>
</DataGrid.Columns>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
我也需要我的viewmodel中的复选框,所以我将其IsChecked属性绑定到我的ViewModel上的属性
<CheckBox x:Name="IncludeFullHist" IsChecked="{Binding Path=ManagerFullHist }" />
Run Code Online (Sandbox Code Playgroud)
对于我页面中的其他元素,我已经能够使用以下两种方法中的任何一种来连接可见性绑定,但是当我将它们复制到datagrid时似乎都不起作用:
<TextBlock DockPanel.Dock="Left" Text=" Visible 2 "
Visibility="{Binding Path=DataContext.ManagerFullHist,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type UserControl}},
Converter={StaticResource boolItemsConverter}}"/>
<TextBlock DockPanel.Dock="Left" Text=" Visible 3 "
Visibility="{Binding Path=ManagerFullHist,
Source={StaticResource mainWinResource},
Converter={StaticResource boolItemsConverter}}"/>
Run Code Online (Sandbox Code Playgroud)
关于我可以在datagrid中解决这个问题的方法的任何建议?
如果我省略了任何可能有用的代码,请告诉我.
我有一个具有使用DataGrid的ItemsSource时结合DataGridTemplateColumn一个DataGrid,但在DataGridTemplateColumn的组合框,我希望能够绑定到视图模型的视图,而不是的ItemsSource.
<DataGrid ItemsSource="{Binding ModelValues, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" >
<DataGridTemplateColumn Header="myHeader" Width="200">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False"
SelectedValue="{Binding myID, Mode=TwoWay}"
ItemsSource="{Binding Path=myList,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
<DataGridTemplateColumn.CellEditingTemplate>
<DataTemplate>
<ComboBox DisplayMemberPath="Value" SelectedValuePath="Key" IsEnabled="False"
SelectedValue="{Binding myID, Mode=TwoWay}"
ItemsSource="{Binding Path=myList,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:ViewModel}}}" />
</DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>
</DataGridTemplateColumn>
</DataGrid>
Run Code Online (Sandbox Code Playgroud)
ViewModel有一个ModelValues属性和myList属性.将ModelValues用于ItemsSource的DataGrid,我想用myList的ComboBox ItemsSource.
我如何更改RelativeSource命令以使其有效?
我正在使用WPF mvvm方法开发一个应用程序.我有一个要求,我必须在组合框中显示项目列表供选择.基于某些标志,我需要从组合框中过滤掉一些项目以供选择.
我尝试使用两个不同的项目源,一个带有完整列表,另一个带有过滤列表,并根据标志我想要更改项目源.这似乎不太好用.有没有简单的方法根据某些标志在现有列表上应用过滤器?
我有一个叫做Person名字,年龄和性别属性的课程.我也有List<Person>5个人(现在硬编码,但不相关).我想通过XAML将它绑定到ListBox,因此它为每个属性都有三个TextBlock:
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=name}" />
<TextBlock Text="{Binding Path=gender}" />
<TextBlock Text="{Binding Path=age}" />
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
Run Code Online (Sandbox Code Playgroud)
问题是我不知道用什么作为数据上下文或项目源或其他什么.有任何想法吗?
假设我们有一个ItemsControl,它与一个源有关.两者之间是否有任何性能差异
ItemsControl.DataContext = resultSet;
Run Code Online (Sandbox Code Playgroud)
和
ItemsControl.ItemsSource = resultSet;
Run Code Online (Sandbox Code Playgroud)
(在两种情况下都在XAML中正确绑定)
当我用当前的应用程序敲除越来越多的MVVM相关问题时,更多的只是不断涌现.:)
我想要替换的当前实现涉及StackPanel,其子项或多或少是动态生成的(通过查看配置文件).每个子节点都是UserControl的一个实例.之前,我所做的是为StackPanel分配一个名称,然后在Window_Loaded事件处理程序中,我只需确定必要的子项数,为每个子实例化一个UserControl,并为UserControl分配一个ID,这样我就知道了单击特定UserControl实例的按钮的正确来源; 每个UserControl上都有3个按钮.
所以我知道我想将StackPanel绑定到一个集合.这当然是不可能的,因为我需要使用从ItemsControl派生的东西,比如ListBox或ListView(甚至ItemsControl本身).为了在MVVM-ifying的第一次迭代中保持简单,我将只使用ListBox.
现在的问题是,我的代码隐藏中的ObservableCollection应该是一个ObservableCollection吗?我相信这意味着无论我如何为我的GUI设置外观,这个ListBox总是会有孩子看起来像他们在MyUserControl的XAML文件中那样.我希望这也可以自定义,但我认为这意味着我必须将MVVM模式应用于UserControl.
我有一个带有ListBox(名为listMyItems)的WPF应用程序,它成功绑定到我创建的一类MyItems.我有一个名为currentMyItems的MyItems列表,然后将其作为ItemSource分配给ListBox.一切正常,如果我将一个项目添加到它弹出列表上的currentMyItems等,当我尝试删除ListBox中的选定项目时会出现问题.这是我使用的代码:
currentMyItems.Remove((MyItem)listMyItems.SelectedItem);
Run Code Online (Sandbox Code Playgroud)
该项目从ListBox中消失,但下次更新时,它会弹回,因为它从未被删除.有小费吗?
itemssource ×10
wpf ×9
binding ×4
c# ×3
xaml ×3
combobox ×2
data-binding ×2
datagrid ×2
mvvm ×2
arrays ×1
datacontext ×1
gridview ×1
listbox ×1
performance ×1