我怎样才能使用的ItemsControl的SelectedItem和表演头?(How can I g

2019-09-17 21:32发布

我工作的WPF Windows应用程序。 我使用的ItemsControl显示收藏列表。 这方面的工作,我发现存在的ItemsControl没有SelectedItem属性。 然后,我怎样才能从ItemsControl中选择的项目。 同时,我怎么能显示的ItemsControl的头。

<ItemsControl ItemsSource="{Binding CustomSalesProducts, Mode=TwoWay}">
        <ItemsControl.Template>
            <ControlTemplate TargetType="ItemsControl">
                <Border>
                    <ScrollViewer VerticalScrollBarVisibility="Auto">
                        <ItemsPresenter/>
                    </ScrollViewer>
                </Border>
            </ControlTemplate>
        </ItemsControl.Template>
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <VirtualizingStackPanel CanHorizontallyScroll="True" CanVerticallyScroll="True" Orientation="Vertical"/>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid x:Name="SalesGrid" Background="White">
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                        <ColumnDefinition Width="Auto"/>
                    </Grid.ColumnDefinitions>
                    <Grid.RowDefinitions>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                        <RowDefinition Height="Auto"/>
                    </Grid.RowDefinitions>
                    <controls:HeaderedContentControl Header="{Binding ProductName, Mode=TwoWay}" Margin="{DynamicResource Margin4}" Style="{DynamicResource HeaderedContentControlStyle}" HorizontalContentAlignment="Right">
                    </controls:HeaderedContentControl>
                    <TextBox Text="{Binding OrderQty, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Row="1" Margin="{StaticResource Margin4}" Style="{DynamicResource MiniTextBoxStyle}" ToolTip="Quantity" />
                    <TextBlock Text="{Binding UnitSalePrice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" Grid.Row="1" Margin="{StaticResource Margin4}" ToolTip="Price"/>
                    <TextBox Text="{Binding Discount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="2" Grid.Row="1" Margin="{StaticResource Margin4}" Style="{DynamicResource MiniTextBoxStyle}" ToolTip="Discount"/>
                    <TextBlock Text="{Binding TaxAmount, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="3" Grid.Row="1" Margin="{StaticResource Margin4}" ToolTip="Tax Amount"/>
                    <TextBlock Text="{Binding LineTotal, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="4" Grid.Row="1" Margin="{StaticResource Margin4}" ToolTip="Total"/>

                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

谢谢,

Answer 1:

至于你说没有SelectedItemItemsControl 。 您可以使用ListBox来代替。



Answer 2:

迟到了一点,但我遇到了同样的问题,同时希望在这能帮助别人这里就是我滚我自己的SelectedItem,因为我不想用一个ListBox。

你可以暴露SelectedCustomSalesProduct属性,你正在使用作为您的DataContext类,然后你可以通过选择项目时将其设置跟踪自己所选择的项目。

在你SalesGrid,您可以添加的事件处理程序的MouseLeftButtonDown和的TouchDown事件,并使用Tag属性,以保持该项目的引用被渲染成这样:

请注意,在我的情况,我用一个StackPanel,而不是一格,我没有编译下面的代码,将其用于说明目的。

通过使用这个例子中,你应该能够得到的总体思路,并在您的业务服务设置选择项。

<DataTemplate>
    <Grid x:Name="SalesGrid" Background="White"
          Tag="{Binding}" 
          TouchDown="DataTemplate_Touch"
          MouseLeftButtonDown="DataTemplate_Click">

然后在你的用户控件/窗口的后面的代码就可以跟踪这样所选项目的:

/// <summary>
/// MyScreen.xaml
/// </summary>
public partial class MyScreen : UserControl
{
    private MyServiceWrapper _serviceWrapper;

    public MyScreen()
    {
        InitializeComponent();
    }
    public MyScreen(MyServiceWrapper serviceWrapper)
    {
        //Instrumentation.Log(typeof(MyScreen), LogTypes.Trace, "Creating instance of MyScreen");

        this._serviceWrapper = serviceWrapper;

        // Set your DataContext, is this the class that would also have your 
        // CustomSalesProducts property exposed 
        this.DataContext = this._serviceWrapper;
        InitializeComponent();
    }



    private void DataTemplate_Touch(object sender, System.Windows.Input.TouchEventArgs e)
    {
        SetSelectedCustomSalesProduct(sender);
    }

    private void DataTemplate_Click(object sender, System.Windows.Input.MouseButtonEventArgs e)
    {
        SetSelectedCustomSalesProduct(sender);
    }

    private void SetSelectedCustomSalesProduct(object sender)
    {
        _serviceWrapper.SelectedCustomSalesProduct = ((Grid)sender).Tag as CustomSalesProduct;

    }



}


Answer 3:

我发现,使用标题有HeaderdItemsControl。 有了这个,我可以添加标题和也实在是不重复的。 但这个问题是,我们有如果我们定义自动调整大小来定义标题的静态规模和项目,然后headeredItemsControl的UI是不完美的,所以我们必须给它的静态大小。

你可以阅读这为如何使用HeaderedItemsControl?



文章来源: How can I get SelectedItem and show Headers using ItemsControl?