tri*_*dev 2 c# data-binding wpf listview mvvm
我在我的MVVM WPF实现中有一个ListView,它有一个带有按钮的DataTemplate.ListView绑定到ViewModel中的一组复杂对象.
<ListView ItemsSource="{Binding Path=ComplexObjects}"
SelectedItem="{Binding Path=SelectedObject}"
Width="Auto">
<ListView.View>
<GridView>
<GridViewColumn Header="My Property">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<TextBlock Text="{Binding MyProperty}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Header="First Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<Button Command="{Binding ???}"/>
</StackPanel>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
Run Code Online (Sandbox Code Playgroud)
所有文本字段都没有问题,但是我可以将Button Command绑定到ComplexObject的成员方法吗?如果是这样,有什么方法可以传递参数?
我有一种感觉,我可能只是在逃避使用ICommand.
谢谢.
您可以ICommand
在ViewModel上绑定一个,传递实例以作为参数调用方法.然后,ViewModel可以在右侧调用适当的方法ComplexObject
.
例如:
<DataTemplate>
<StackPanel Margin="6,2,6,2">
<Button Command="{Binding DoSomethingCommand, RelativeSource={RelativeSource AncestorType={x:Type ViewModelType}, Mode=FindAncestor}" CommandParameter="{Binding}"/>
</StackPanel>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
然后viewmodel看起来像这样:
public ICommand DoSomethingCommand
{
get { return new DelegateCommand<object>(DoSomething); }
}
private void DoSomething(object instance)
{
var complexObject = instance as ComplexObject;
if (complexObject != null)
complexObject.SomeMethod();
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
9492 次 |
最近记录: |