簡體   English   中英

將列表框中的選定項目與datatemplate綁定

[英]Binding selected item in listbox with datatemplate

我這里有簡單的列表框: 鏈接到我有綁定數據的圖像 現在,當我點擊一個項目(一行)列表框項/行被選中/紫色但實際上這個項目不是真正選擇只有行改變顏色但是當我點擊圖像或文本然后行我在哪里點擊未選中/小提琴,但代碼中的項目被選中。 我不確定你是否明白我在說什么。 簡而言之,如果我點擊空格行然后行是視覺選擇但發件人像列表框項目不能獲取數據,如果我點擊文本或圖像然后發送者獲取數據但其不是視覺選擇。 當我點擊任何選擇行/紫色和項目發送者獲取數據時,我該怎么做?

我的第二個問題是為什么我的矩形像線一樣使用最大寬度像文本我想拉伸這個矩形在列表框的全寬度這可能嗎?

XAML:

<ListBox x:Name="lbMessagesUsersList" Foreground="Black" ItemsSource="{Binding MyDatasMessagesUserList }">
                <ListBox.ItemTemplate>
                    <DataTemplate>
                        <ListBoxItem Tapped="userTapped"  Tag="{Binding}" >
                          <StackPanel>
                                <Grid>
                                    <Grid.ColumnDefinitions>
                                        <ColumnDefinition Width="50"/>
                                        <ColumnDefinition Width="*"/>
                                    </Grid.ColumnDefinitions>
                                    <Image Grid.Column="0" Source="{Binding MessengeHisPhoto}" HorizontalAlignment="Left" Width="40" Height="40" Margin="5,-18,0,-18" Stretch="Fill" ></Image>
                                    <TextBlock x:Name="tbMessengerName"  Text="{Binding MessengeFullName}" HorizontalAlignment="Left"
                                      Grid.Column="1" Margin="25,0,0,0"/>
                                </Grid>
                                <Rectangle Height="1" Margin="0,0,0,-38" HorizontalAlignment="Stretch">
                                    <Rectangle.Fill>
                                        <SolidColorBrush Color="Black"/>
                                    </Rectangle.Fill>
                                </Rectangle>
                            </StackPanel>
                        </ListBoxItem>
                    </DataTemplate>
                </ListBox.ItemTemplate>
            </ListBox>

CS:

    private void userTapped(object sender, TappedRoutedEventArgs e)
    {
        var button = sender as ListBoxItem;
        if (button != null)
        {
            var subject = MyDatasMessagesUserList.FirstOrDefault(sub => sub == button.Tag);
            if (subject != null)
            {
                IdOfChoosenUser = subject.MessengeIdUser;
            }
        }...

我也嘗試刪除ListbOxItem並將綁定標記設置為stackPanel,但這也不起作用。{

請注意,當您使用ItemTemplate ,每個項目都包含在ListBoxItem - 因此,您不應在模板中使用ListBoxItem,因為這將生成兩個嵌套的項目。 嘗試刪除它,如下所示:

<ListBox.ItemTemplate>
    <DataTemplate>
        <StackPanel Tapped="userTapped"  Tag="{Binding}">
            <!-- content here -->
        </StackPanel>
    </DataTemplate>
</ListBox.ItemTemplate>

對於處理程序,可能更容易通過名稱簡單地引用ListBox而不是嘗試使用Tag (感謝@MetroSmurf):

private void userTapped(object sender, TappedRoutedEventArgs e)
{
    var selectedItem = lbMessagesUsersList.SelectedItem;
    var subject = MyDatasMessagesUserList.FirstOrDefault(sub => sub == selectedItem);
}

對於問題的第二部分:要拉伸項目,需要拉伸ListBoxItem包裝器。 通過使用ItemContainerStyle執行此操作:

<ListBox>
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
            <Setter Property="HorizontalAlignment" Value="Stretch" />
            <Setter Property="HorizontalContentAlignment" Value="Stretch" />
        </Style>
    </ListBox.ItemContainerStyle>
</ListBox>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM