일반적으로 MVVM을 사용하는 경우 ObservableCollection 및 데이터 바인딩으로 업데이트하는 SelectedItem의 속성을 사용하여 viewModel을 갖게됩니다.
예를 들어, 뷰 모델은 다음과 같이 수 :
class ProductsViewModel : INotifyPropertyChanged
{
public ObservableCollection<Product> Products { get; set; }
private Product _selectedProduct;
public Product SelectedProduct
{
get { return _selectedProduct; }
set
{
_selectedProduct = value;
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("SelectedProduct"));
}
}
public ProductsViewModel()
{
Products = new ObservableCollection<Product>();
Products.Add(new Product() { Name = "ProductA" });
Products.Add(new Product() { Name = "ProductB" });
}
public event PropertyChangedEventHandler PropertyChanged;
}
귀하의 윈도우 객체의 XAML :
<Window x:Class="ProductsExample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<ListBox HorizontalAlignment="Left" Height="171" Margin="32,29,0,0" VerticalAlignment="Top" Width="176"
ItemsSource="{Binding Products}"
SelectedItem="{Binding SelectedProduct, Mode=TwoWay}"
DisplayMemberPath="Name"
/>
<TextBox HorizontalAlignment="Left" Height="33" Margin="36,226,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="172"
Text="{Binding SelectedProduct.Name, Mode=TwoWay}"/>
</Grid>
</Window>
당신은 단지 데이터 컨텍스트 설정 숨김 코드 :
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
this.DataContext = new ProductsViewModel();
}
}
을
목록 상자에서 제품을 선택할 때마다 텍스트 상자가 선택한 제품으로 업데이트되고 텍스트 상자에서 제품을 변경하면 (제품이 INotifyPropertyChanged를 올바르게 구현 한 경우) 목록 상자의 항목도 업데이트됩니다. 분명히
이는 숨김 코드를 사용하여 모든 달성하지만, 여러 가지 이유로 수는 여기에 설명 : http://msdn.microsoft.com/en-us/magazine/dd419663.aspx, 당신이 필요로하는 항목에 액세스 할 수있는 인덱스로 특정 경우 뷰 모델
출처
2013-08-28 22:40:05
Rui
인덱스 또는 속성 값별로 지정 하시겠습니까? –
은 인덱스가 아닌 해당 요소의 속성 값으로 지정됩니다. – FlyingFoX