C#WPF ListBox鼠标点击迟到

时间:2015-05-02 08:12:50

标签: c# wpf listbox listitem mouseclick-event

当我左键单击该项目时,我正在尝试使用TextBlock项目中的文本进行ListBox更新。

我的C#代码:

private void listBox_MouseDown_rem(object sender, MouseButtonEventArgs e)
{
    if (pathListB.SelectedItem != null)
    {
        rem_block.Text = pathListB.SelectedValue.ToString();
    }
}

XAML:

 <ListBox Name="pathListB" PreviewMouseLeftButtonDown="listBox_MouseDown_rem" HorizontalAlignment="Left" Height="246" Margin="10,10,0,0" VerticalAlignment="Top" Width="491"/>
 <TextBlock Name="rem_block" HorizontalAlignment="Left" Margin="10,261,0,0" TextWrapping="Wrap" Text="Select Item to Remove" VerticalAlignment="Top" Height="20" Width="411"/>

现在所有这一切都做了它应该做的事情,除了当我选择一个ListBoxItem(我在其他地方填充这个ListBox的循环)时它只会更新到我之前的值我的下一次鼠标点击,所以它总是&#34;迟到。&#34;

例如,我的列表框中包含以下项目:

Sentence 1
Sentence 2
Sentence 3

我会点击&#34;句子1&#34;,而我的TextBlock没有变化。我点击&#34;句子3&#34;和TextBlock更新为&#34;句子1,&#34;它始终更新为先前的值。

3 个答案:

答案 0 :(得分:0)

在PreviewMouseDown上,ListBox项尚未更改。请改为使用PreviewMouseUp事件,该事件将在项目更改后触发。

答案 1 :(得分:0)

您可以创建一个名为SelectedItem的属性(您的绑定类型为您的集合)并将其绑定到ListBox的SelectedItem属性。然后将TextBlock的Text属性绑定到您定义的SelectedItem属性。

创建SelectedItem属性:

public string SelectedItem
    {
        get { return selectedItem; }
        set { selectedItem = value; }
    }

和你的xaml:

<ListBox ItemsSource="{Binding Sentences}" SelectedItem="{Binding SelectedItem}" Grid.Column="1" />
<TextBlock Text="{Binding Path=SelectedItem}" />

答案 2 :(得分:0)

您需要在文本框中指定ElementName属性以指定列表框名称

To solve this you should change your binding to the following:
<TextBlock ... Text="{Binding ElementName=pathListB, Path=SelectedItem.Content}" ... />

将列表框中的更新源触发器设置为属性已更改