我是MVVM的新手,也是WPF的新手.事实上,几个月前我开始编程.MVVM非常适合我的绑定概念,我已经尝试了几天,只是简单地创建一个允许您从listbx中选择项目的应用程序,当您单击添加按钮时,所选项目应该是保存在新列表中.第二个列表框显示添加的最新项目,您可以选择一个项目并使用另一个按钮将其删除.通常我会去点击事件并用很少的方法装饰我的代码隐藏,但我真的想通过使用绑定和没有代码隐藏来学习如何做到这一切.我会非常高兴得到任何帮助,请记住,我是新手,我真的希望尽可能简单:)与亲切的问候Daniela
<WrapPanel HorizontalAlignment="Center" Margin=" 10">
<ListBox x:Name="Firstbox"
Width="100"
ItemsSource="{Binding FoodList}"
DisplayMemberPath="Name" >
</ListBox>
<Button Margin="10 >Select</Button>
<ListBox Width="100"></ListBox>
Run Code Online (Sandbox Code Playgroud)
private List _foodList;
public List<FoodItem> FoodList
{
get { return _foodList; }
set { _foodList = value; }
}
private List<FoodItem> _newFoodList;
public List<FoodItem> NewFoodList
{
get { return _newFoodList; }
set { _newFoodList = value; }
}
public MainViewModel()
{
InitializeCommands();
GetFood();
}
private void GetFood()
{
FoodList = new List<FoodItem>()
{
new FoodItem() {Name="Applepie"},
new FoodItem() {Name="Scones"}
};
}
Run Code Online (Sandbox Code Playgroud)
Lists 替换为s ObservableCollection,以便UI可以检测何时添加新项目.SelectedItem向ViewModel 添加属性:
private FoodItem _selectedItem;
public FoodItem SelectedItem
{
get { return _selectedItem;}
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
Run Code Online (Sandbox Code Playgroud)将SelectedItem1st 的属性绑定ListBox到此属性:
<ListBox Width=" 100" x:Name="Firstbox"
ItemsSource="{Binding FoodList}"
DisplayMemberPath="Name"
SelectedItem="{Binding SelectedItem}" />
Run Code Online (Sandbox Code Playgroud)将您的第二个绑定ListBox到NewFoodList酒店
在ViewModel中创建一个命令:
private DelegateCommand _addItemCommand;
public ICommand AddItemCommand
{
get
{
if (_addItemCommand == null)
{
_addItemCommand = new DelegateCommand(AddItem);
}
return _addItemCommand;
}
}
void AddItem()
{
if (SelectedItem != null)
NewFoodList.Add(SelectedItem);
}
Run Code Online (Sandbox Code Playgroud)最后,将按钮的Command属性绑定到AddItemCommand属性:
<Button Margin="10" Command="{Binding AddItemCommand}" >Select</Button>
Run Code Online (Sandbox Code Playgroud)