标签: itemssource

为什么DataContext和ItemsSource不是多余的?

在WPF数据绑定中,我知道你有DataContext一个告诉元素它将绑定到哪个数据以及ItemsSource哪个"绑定".

但是,例如在这个简单的例子中,它似乎没有ItemsSource做任何有用的事情,因为,除了绑定之外,你还想要Element做什么DataContext呢?

<ListBox DataContext="{StaticResource customers}" 
         ItemsSource="{Binding}">
Run Code Online (Sandbox Code Playgroud)

在更复杂的例子中ItemsSource,你有路径和来源似乎正在侵占其领土DataContext.

ItemsSource="{Binding Path=TheImages, Source={StaticResource ImageFactoryDS}}"
Run Code Online (Sandbox Code Playgroud)

了解这两个概念的最佳方法是什么,以了解何时以及如何在各种编码方案中应用它们?

data-binding wpf datacontext itemssource

34
推荐指数
2
解决办法
2万
查看次数

ItemContainerGenerator.ContainerFromItem()返回null?

我有一些奇怪的行为,我似乎无法解决.当我遍历ListBox.ItemsSource属性中的项目时,我似乎无法获取容器?我期待看到一个ListBoxItem返回,但我只得到null.

有任何想法吗?

这是我正在使用的一些代码:

this.lstResults.ItemsSource.ForEach(t =>
    {
        ListBoxItem lbi = this.lstResults.ItemContainerGenerator.ContainerFromItem(t) as ListBoxItem;

        if (lbi != null)
        {
            this.AddToolTip(lbi);
        }
    });
Run Code Online (Sandbox Code Playgroud)

ItemsSource当前设置为Dictionary并且包含许多KVP.

wpf containers listbox itemssource

33
推荐指数
5
解决办法
4万
查看次数

ItemsSource和DataContext之间的区别与ListBox有关

我不太熟悉ItemsSource和DataContext之间的区别.有人能解释一下并用例子来支持吗?我何时会使用其中一个.

我正在阅读文档,它说我可以使用DataContext进行绑定,但是我会在其中抛出一个ObservableCollection,并且列表中没有任何内容.如果我在ItemsSource上抛出相同的集合,它可以正常工作.

silverlight datacontext itemssource silverlight-4.0

22
推荐指数
1
解决办法
1万
查看次数

UserControl的自定义ItemsSource属性

有谁知道如何定制ItemsSource

我想做的是为了itemsSource自己UserControl做一个让它受到约束ObservableCollection<>.

另外,我可以知道每当itemsSource更新的项目数量,以便做进一步的程序.

非常感谢.

data-binding wpf itemssource

20
推荐指数
2
解决办法
1万
查看次数

WPF - 在ItemsSource更改时重置ListBox滚动位置

我目前有一个ListBox,其ItemsSource集合绑定到我的viewmodel上的一个属性,类型为IEnumerable.当preoprty的引用发生更改时,ListBox会按预期更新,但是我有一个问题,如果我有大量项目并滚动到ListBox的底部,然后将引用更改为包含,例如,1项目的另一个集合,ListBox视图为空,不显示滚动条.然后我必须用鼠标滚轮向上滚动列表框,直到1项进入视图.

因此,我认为我所追求的是,​​只要ItemsSource属性发生更改,就会将ListBox的滚动位置重置为顶部,这样无论收集的大小有多少,都会始终显示某些内容.

wpf scroll listbox itemssource

18
推荐指数
2
解决办法
8995
查看次数

如何将网格设置为Items控件的模板?

我正在尝试创建一个ItemsControl使用网格ItemsPanel的方式,它有两个列,其中第一列宽度是该列中最宽项目的宽度,并且可能需要行显示所有项目

基本上,我想要以下内容,但不知何故ItemsControl,我可以绑定到一组对象:

<Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="auto"/>
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>

        <Grid.RowDefinitions>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
            <RowDefinition Height="auto"/>
        </Grid.RowDefinitions>

        <Label Content="{Binding Items[0].Header}"/>
        <TextBox Text="{Binding Items[0].Content}" Grid.Column="1"/>

        <Label Content="{Binding Items[1].Header}" Grid.Row="1"/>
        <TextBox Text="{Binding Items[1].Content}" Grid.Row="1" Grid.Column="1"/>

        <Label Content="{Binding Items[2].Header}" Grid.Row="2"/>
        <TextBox Text="{Binding Items[2].Content}" Grid.Row="2" Grid.Column="1"/>
    </Grid> 
Run Code Online (Sandbox Code Playgroud)

编辑:雷切尔的答案很有效,这是一个有效的例子.

(我将Grid.IsSharedSizeScope ="True"移动到ItemsPanel,不确定Rachel是否打算将它放在ItemTemplate中(这不起作用))

namespace WpfApplication23
{
    public partial class Window1 : Window
    {
        public List<Item> Items { get; set; }

        public Window1()
        {
            Items = new List<Item>() 
            { 
                new Item(){ Header="Item0", …
Run Code Online (Sandbox Code Playgroud)

wpf grid itemscontrol itemssource

17
推荐指数
2
解决办法
2万
查看次数

使用代码设置xaml代码ItemsSource ="{Binding}"

我有以下属性Temp2:(我的UserControl实现INotifyPropertyChanged)

    ObservableCollection<Person> _Temp2;
    public ObservableCollection<Person> Temp2
    {
        get
        { 
            return _Temp2; 
        }
        set
        {
            _Temp2 = value;
            OnPropertyChanged("Temp2");
        }
    }

    public event PropertyChangedEventHandler PropertyChanged = delegate { };

    private void OnPropertyChanged(string propertyName)
    {
        PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }
Run Code Online (Sandbox Code Playgroud)

我需要动态创建一个列表视图.我在XAML中有以下列表视图:

<ListView 
     Name="listView1" 
     DataContext="{Binding Temp2}" 
     ItemsSource="{Binding}" 
     IsSynchronizedWithCurrentItem="True">
 <ListView.View>
 .... etc
Run Code Online (Sandbox Code Playgroud)

现在我尝试用c#创建相同的listview:

        ListView listView1 = new ListView();
        listView1.DataContext = Temp2;
        listView1.ItemsSource = Temp2; // new Binding(); // ????? how do I have to implement this line
        listView1.IsSynchronizedWithCurrentItem = true;
        //.. etc
Run Code Online (Sandbox Code Playgroud)

当我使用C#填充listview时,listview不会被填充.我究竟做错了什么?

c# datacontext inotifypropertychanged itemssource

14
推荐指数
1
解决办法
2万
查看次数

WPF DataGrid:DataGridComboxBox ItemsSource绑定到集合集合

情况:

我在XAML中创建了一个DataGrid,并将ItemsSource绑定到包含属性的某个类的ObservableCollection.然后在C#中,我创建了一个DataGridTextColumn和一个DataGridComboBoxColumn,并将这些绑定到ObservableCollection内对象的属性.我可以将DataGridComboBoxColumn绑定到一个简单的Collection,但我想要做的是将它绑定到一组字符串集合,这样对于每一行,DataGrid中的ComboBox都有一个不同的字符串集合.我没有这样做......

题:

如何绑定DataGridCombBoxColumn以便我可以为此类型列的每一行设置不同的字符串集合?

代码示例:

XAML:

<Window>
  <!-- ... -->
  WPFToolkit:DataGrid
           x:Name="DG_Operations"
           Margin="10,5,10,5" 
           Height="100" 
           HorizontalAlignment="Stretch" 
           FontWeight="Normal" 
           ItemsSource="{Binding Path=OperationsStats}"
           AlternatingRowBackground="{DynamicResource SpecialColor}" 
           HorizontalScrollBarVisibility="Auto" 
           VerticalScrollBarVisibility="Visible" 
           SelectionMode="Extended"
           CanUserAddRows="False" 
           CanUserDeleteRows="False"
           CanUserResizeRows="True" 
           CanUserSortColumns="True"
           AutoGenerateColumns="False" 
           IsReadOnly="False" 
           IsEnabled="True"
           BorderThickness="1,1,1,1" 
           VerticalAlignment="Stretch"/>
  <!-- ... -->
</Window>
Run Code Online (Sandbox Code Playgroud)

C#:

public class DataModelStatsOperations
{
   public ObservableCollection<IStatsOperation> OperationsStats { get; set; }
}

public interface IStatsOperation
{
   string Operation { get; set; }
   Collection<string> Data{ get; set; }
}

public class StatsOperation : IStatsOperation
{
    public StatsOperation(string operation, Collection<string> data)
    {
        Operation = operation; …
Run Code Online (Sandbox Code Playgroud)

c# wpf datagrid itemssource datagridcomboboxcolumn

11
推荐指数
2
解决办法
4万
查看次数

WPF - Combobox SelectedItem没有设置?

我有一个ComboBox,它的ItemsSource绑定到一个静态List<CustomSettings>的选项.ComboBox是绑定到CustomObject类的表单的一部分,该类的一个属性是CustomSettingProperty.

我想将ComboBox的SelectedItem绑定到CustomObject中指定的属性,但是SelectedItem="{Binding Path=CustomSettingProperty}"没有设置默认的选定项.使用断点我可以看到它正在调用get;方法,所以我认为问题可能在于CustomSettingProperty是单独创建的,List<CustomObject>因此WPF认为它不是同一个项目.

是否有捷径可寻?或者也许是另一种选择,因为CustomSettings类确实包含Id?

wpf binding combobox selecteditem itemssource

11
推荐指数
1
解决办法
1万
查看次数

WPF绑定ItemsSource到静态方法?

我在名为"Article"的类中有以下静态方法:

public static ObservableCollection<Article> GetObservableCollection() { ... }
Run Code Online (Sandbox Code Playgroud)

我想将它直接绑定到ComboBox的ItemsSource属性,但是在XAML而不是代码中,我找不到正确的语法.

它应该看起来像我想的那样(EmacGbscCore是包含Article对象的程序集):

ItemsSource="{Binding Source={x:Static EmacGbscCore:Article.GetObservableCollection}}"
Run Code Online (Sandbox Code Playgroud)

提前感谢您的帮助.

methods wpf binding itemssource

11
推荐指数
1
解决办法
7502
查看次数