我有一些ComboBox
控件,每个控件都有一些值。每个选定的值都会触发一个事件。当从ComboBoxA中选择item时,我的事件将由所选item的值触发。当我的一个组合框刚刚打开和关闭,没有改变它的值,事件是不触发(这是一个组合框的默认行为)。但这不是我需要的。
我所做的是创建一个与DropDownClosed
事件关联的行为,但我不知道如何触发SelectionChanged
事件。
编辑:
这个问题可以概括为:如何“手动”触发UI控件的事件?或者-是否有方法调用与事件关联的方法?
编辑二:
我将设法把这个问题解释得更清楚些。我有这样的代码,它接受一个项目列表,并将它们作为类别(单选按钮)和类别下的项目(单选按钮内的组合框)。选择项目时-触发选择更改事件。OK!当选择另一个单选按钮时-触发一个事件。OK!!
不起作用的特殊情况(作为ComboBox行为的默认值):当打开一个未被选择的组合,然后关闭它而不改变其选择时-没有事件被触发。但是-这个组合是在一个未选择的类别,我想现在被选中,sincr用户thouched它。我的想法是使用行为(是在XAML代码,但到目前为止是不工作…)
代码(或多或少):
<ListBox ItemsSource="{Binding Categories}">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Vertical">
<RadioButton Content="{Binding CategotyName}" GroupName="TestCategory" IsChecked="{Binding IsSelected}"
cal:Message.Attach="SelectionChanged($dataContext)]"/>
<ComboBox cal:Message.Attach="SelectionChanged($dataContext)]"
ItemsSource="{Binding TestsNamesUnderCategory}" SelectedIndex="{Binding SelectedTestInx, Mode=TwoWay}">
<i:Interaction.Behaviors>
<local:ComboBoxReSelectionBehavior />
</i:Interaction.Behaviors>
</ComboBox>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
字符串
行cal:Message.Attach="SelectionChanged($dataContext)]"
使用的是Caliburn框架,它只是发送触发器到我的方法。
希望现在更清楚了。谢谢你,谢谢
2条答案
按热度按时间svujldwt1#
为什么不将选择绑定到视图模型属性,然后执行所需的逻辑?
Xaml:
字符串
视图模型:
型
如果你绝对需要使用事件,请使用event-to-command...
假设您使用的是System.Windows.Interactivity和GalasoftMVVMlight
参考文献:
型
Xaml:
型
这将把事件挂接到一个命令上,该命令将在视图模型上使用所请求的参数执行。
视图模型:
型
注意,我写这篇文章时没有在这台计算机上访问vs...关于如何做到这一点,有很多例子。希望对你有帮助。
jobtbby32#
如果您只需要触发事件,可以从
DropDownClosed
激活的命令调用方法。