所以我在windows phone应用程序中实现了MVVM(light toolkit)。
我有一个ListBox,SelectedItem
绑定到属性SelectedArticle。
下面是(非常简单的)属性:
private Article _selectedArticle;
public Article SelectedArticle
{
get { return _selectedArticle; }
set
{
_selectedArticle = value;
base.RaisePropertyChanged("SelectedArticle");
}
}
所以我想要的是更改视图,检查ListBox的元素和元素。 无论如何,将视图的更改放在settet中会很容易,但我想避免这种情况。那怎么办呢?
这里是xaml:
<ListBox IsEnabled="{Binding ListBoxEnabled, Mode=TwoWay}" SelectedItem="{Binding SelectedArticle, Mode=TwoWay}" Opacity="{Binding Opacity, Mode=TwoWay}" ItemsSource="{Binding ArticlesList}" Height="634" Width="456">
<ListBox.ItemTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<Image
Margin="0,15"
VerticalAlignment="Top"
Source="{Binding Image}"
Height="100"
Width="100" />
<StackPanel>
<TextBlock Margin="10,15"
Width="250"
TextWrapping="Wrap"
VerticalAlignment="Top"
HorizontalAlignment="Left"
FontSize="24"
Text="{Binding Content}" />
<TextBlock Margin="20,0"
Width="100"
VerticalAlignment="Top"
HorizontalAlignment="Left"
FontSize="20"
Text="{Binding Id}"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
答案 0 :(得分:3)
你想要一个像交互触发器这样的东西吗? 将其添加到您的xaml
<i:Interaction.Triggers>
<i:EventTrigger EventName="Tap">
<cmd:EventToCommand Command="{Binding EventTapCommand, Mode=OneWay}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
然后在ViewModel中定义RelayCommand
public RelayCommand EventTapCommand { get; private set; }
public MainViewModel()
{
EventTapCommand = new RelayCommand(DoSomeCoolStuff);
}
如果需要,您还可以从列表中传递所选项目,只需设置CommandParameter并使用项目类型定义RelayCommand。我忘了确切的绑定语法。类似的东西:
<cmd:EventToCommand Command="{Binding EventTapCommand, Mode=OneWay}" CommandParameter="{Binding}"/>
public RelayCommand<MyType> EventTapCommand { get; private set; }
答案 1 :(得分:2)
您可以使用以下行为将命令附加到其中一个ListBox事件:
答案 2 :(得分:1)
看看这篇文章http://www.japf.fr/2009/03/thinking-with-mvvm-data-templates-contentcontrol/,它使用wpf datatemplates根据数据绑定属性显示不同的视图。