当我左键单击该项目时,我正在尝试使用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;它始终更新为先前的值。
答案 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}" ... />
将列表框中的更新源触发器设置为属性已更改