我的兒童視圖中有收藏。
<CollectionView SelectionMode="Single" SelectedItem="{Binding Source={Reference sideview}, Path=myViewModel.SelectedItem.FileName}"
ItemsSource="{Binding Source={x:Reference sideview}, Path=myViewModel.Items }" >
<CollectionView.ItemTemplate>
<DataTemplate >
<Grid>
<Label Text="{Binding FileName}" VerticalOptions="Center"/>
</Grid>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
我想洗掉所選專案我有洗掉按鈕的父視圖
<Button x:Name="BTN_REMOVE_FILE" Text="Remove" Command="{Binding DeleteCommand}" CommandParameter="{Binding SelectedItem}" >
我在我的視圖模型中創建了洗掉命令
[RelayCommand]
public void Delete(Data s)
{
if (Items.Contains(s)) {
Items.Remove(s);
}
}
從視圖中,我已經從這樣的視圖中傳遞了命令引數
我還在我的視圖模型中創建了 selectedItem
public Data selectedItem;
public Data SelectedItem
{
get
{
return selectedItem;
}
set
{
if(selectedItem != value)
{
selectedItem = value;
}
}
}`public MyViewModel()
{
Items = new ObservableCollection<Data>();
selectedItem = new Data();
}
`
它向我顯示例外,例如引數“引數”(物件)不能是 DemoApp.MVVM.ViewModel.MyViewModel 型別,因為命令型別需要 DemoApp.MVVM.Model.Data 型別的引數。(引數'引數')
試圖在我的 viewModel 中添加它 public Data Name { get; set; }
看法 <Button x:Name="BTN_REMOVE_FILE" Text="Remove" Command="{Binding DeleteCommand}" CommandParameter="{Binding Name}" >
uj5u.com熱心網友回復:
Command="{Binding Source={RelativeSource AncestorType={x:Type viewmodel:MyViewModel}}, Path=DeleteCommand}"
澄清一點:
您需要在 DataType 內部(設定為您的 CollectionView ItemTemplate)才能使用您的:
{Binding .}
作為命令引數。
并且要進入此類資料型別,需要您上升一個級別,以便您在 ViewModel 中找到您的命令的路徑。
uj5u.com熱心網友回復:
您可以使用下面的代碼洗掉集合視圖中的專案。
在 Mainpage.xaml
<CollectionView ItemsSource="{Binding Products}">
<CollectionView.ItemTemplate>
<DataTemplate>
<StackLayout>
<Label Text="{Binding Name}" />
<Label Text="{Binding Price}" />
<Button Text="Remove" Clicked="Remove_Clicked" />
</StackLayout>
</DataTemplate>
</CollectionView.ItemTemplate>
</CollectionView>
在 Mainpage.xaml.cs
public partial class MainPage : ContentPage
{
public MainPage()
{
InitializeComponent();
BindingContext = new ProductsViewModels();
}
public void Remove_Clicked(object sender, EventArgs e)
{
var button = sender as Button;
var product = button.BindingContext as Products;
var vm = BindingContext as ProductsViewModels;
vm.RemoveCommand.Execute(product);
}
}
在視圖模型中
internal class ProductsViewModels
{
public ObservableCollection<Products> Products
{
get;
set;
}
public Command<Products> RemoveCommand
{
get
{
return new Command<Products>((Product) => {
Products.Remove(Product);
});
}
}
public ProductsViewModels()
{
Products = new ObservableCollection<Products> {
new Products {
Name = "name1",
Price = 100
},
new Products {
Name = "name2",
Price = 100
},
new Products {
Name = "name3",
Price = 100
}
};
}
}
uj5u.com熱心網友回復:
在視圖模型中為 selectedItem 創建一個屬性,如下所示
視圖模型:
public Data selectedItem;
public Data SelectedItem
{
get
{
return selectedItem;
}
set
{
if(selectedItem != value)
{
selectedItem = value;
}
}
}
and set that property in constructor
public MyViewModel()
{
Items = new ObservableCollection<Data>();
SelectedItem = new Data();
}
and then for delete method directly pass the selected Item
public void Delete()
{
if (Items.Contains(SelectedItem))
Items.Remove(SelectedItem);
}
In collection view bind the selectedItem property
我的觀點:
And this is where I have binded the command
<Button x:Name="BTN_REMOVE_FILE" ImageSource="remove_file.gif" Text="Remove" Command="{Binding DeleteCommand}" MaximumHeightRequest="30" BorderColor="Transparent" BackgroundColor="Transparent" Padding="5" TextColor="White" />
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/535905.html
標籤:。网毛伊岛
