【问题标题】:Binding collection of Threads to ListBox将线程集合绑定到 ListBox
【发布时间】:2015-01-16 10:13:03
【问题描述】:

可能有一个主题可以解决我的问题,但我在这方面花了太多时间,所以我决定问一下。

我有一个 ListView,我绑定了一个进程集合。我有一个 ListBox,我想在其中放置选定进程的线程。 ListView 中的绑定有效,但 ListBox 中的类比无效。

这是我的 .xaml:

<Window x:Class="TaskManager.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window" Height="453" Width="533" Icon="/TaskManager;component/Images/taskmgr.png">
<Grid>
    <ListView Height="276" HorizontalAlignment="Left" Name="processesView" VerticalAlignment="Top" Width="503" ItemsSource="{Binding ProcessList}">
        <ListView.View>
            <GridView AllowsColumnReorder="False">
                <GridViewColumn DisplayMemberBinding="{Binding ProcessName}">
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Click="nameColumnHeader_Click">
                            Name
                        </GridViewColumnHeader>
                    </GridViewColumn.Header>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding Id}">
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Click="IDColumnHeader_Click">
                            ID
                        </GridViewColumnHeader>
                    </GridViewColumn.Header>
                </GridViewColumn>
                <GridViewColumn DisplayMemberBinding="{Binding BasePriority}">
                    <GridViewColumn.Header>
                        <GridViewColumnHeader Click="priorityColumnHeader_Click">
                            Priority
                        </GridViewColumnHeader>
                    </GridViewColumn.Header>
                </GridViewColumn>
                <GridViewColumn Header="Keep alive">
                    <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <CheckBox x:Name="keepAliveBox" IsChecked="{Binding EnableRaisingEvents}" Checked="keepAliveBox_Checked" Unchecked="keepAliveBox_Unchecked" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>
    <ListBox Height="120" HorizontalAlignment="Left" Margin="93,282,0,0" Name="threadBox" VerticalAlignment="Top" Width="200" ItemsSource="{Binding ElementName=processesView, Path=SelectedItem.Threads}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <!--<ListBoxItem Content="{Binding}"/>-->
                <Label Content="{Binding Name}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>
</Grid>

执行后,我在 ListBox 中看不到任何内容,但如果我在内部单击,则会选择某些内容。因此,如果我将上面的内容更改为 Content="TEST",我可以看到几个带有“TEST”值的标签。所以看来我的名字绑定不正确。

这是我设置上下文的 .cs 部分:

public MainWindow()
{
    InitializeComponent();
    processesView.DataContext = this;
    threadBox.DataContext = this;
    ...
}

【问题讨论】:

  • 你能把xaml的其余部分发上来吗?
  • 在您的 xaml 中,您已经将 threadBox 的 ItemSource 设置为 processesView SelectedItem,为什么还要在 xaml.cs 中设置 datacontext?
  • 我刚刚尝试了很多我在不同主题中发现的东西。将其注释掉并不能解决问题。

标签: c# wpf xaml binding listbox


【解决方案1】:

项目是不可见的,但可以选择,所以很可能我绑定了错误的东西。这就是原因。我绑定到 Thread 的 Name 属性,而 Process 有一个没有该属性的 ProcessThreads 集合。这是 .xaml 中的修复:

    <ListBox Height="120" HorizontalAlignment="Left" Margin="93,282,0,0" Name="threadBox" VerticalAlignment="Top" Width="200" ItemsSource="{Binding ElementName=processesView, Path=SelectedItem.Threads}">
        <ListBox.ItemTemplate>
            <DataTemplate>
                <Label Content="{Binding Path=Id}" />
            </DataTemplate>
        </ListBox.ItemTemplate>
    </ListBox>

无法等待 Visual Studio 2015 中的 XAML 调试器。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-03
    • 2015-09-01
    • 2011-07-10
    • 2011-02-10
    • 1970-01-01
    • 2011-12-03
    • 1970-01-01
    相关资源
    最近更新 更多