다음은 MVVM을 사용하여 설명하기위한 예제입니다. 사용자 정의 컨트롤 목록을 가질 필요가 없으며 실제로 이것은 MVVM 관점에서 잘못된 것으로 간주됩니다.
Visual Studio의 기본 WPF 응용 프로그램 템플릿을 기반으로합니다.
여기에 관련된 수업이 있습니다.
public abstract class ViewModelBase : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected virtual void OnPropertyChanged(string propertyName)
{
PropertyChangedEventHandler changed = PropertyChanged;
if (changed != null)
{
changed(this, new PropertyChangedEventArgs(propertyName));
}
}
}
public class Container : ViewModelBase
{
private string m_Objective;
private ProblemCollection m_Problems;
public Container()
{
m_Problems = new ProblemCollection();
}
public string Objective
{
get { return m_Objective; }
set
{
m_Objective = value;
OnPropertyChanged("Objective");
}
}
public ProblemCollection Problems
{
get { return m_Problems; }
set
{
m_Problems = value;
OnPropertyChanged("Problems");
}
}
}
public class Problem : ViewModelBase
{
private string m_Name;
public string Name
{
get { return m_Name; }
set
{
m_Name = value;
OnPropertyChanged("Name");
}
}
}
public class ProblemCollection : ObservableCollection<Problem>
{
}
그리고 기본 창. http://stackoverflow.com - 내가 바인딩을
<Window x:Class="StackOverflowDemo.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>
<TextBlock TextWrapping="Wrap" Text="{Binding Objective}" Grid.Column="0" VerticalAlignment="Center"
FontWeight="Bold" />
<ItemsControl ItemsSource="{Binding Problems}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<!--<Rectangle Stroke="Black" Height="20" Width="20" Margin="1,0" />-->
<TextBlock Text="{Binding Path=Name}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</Grid>
</Window>
MainWindow.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
// Create dummy test data.
// Normally this will be passed to the window or set externally
var container = new Container();
container.Problems.Add(new Problem {Name = "Foo"});
container.Problems.Add(new Problem {Name = "Bar"});
container.Problems.Add(new Problem {Name = "hello"});
container.Problems.Add(new Problem {Name = "world"});
DataContext = container;
}
}
출처
2011-09-06 13:26:33
bic
직접 질문에 대답하지 않습니다하지만 일부 사용이 될 수를 보여 당신의 사각형을 주석 한합니다/questions/1939403/mvvm-viewmodel-vs-mvc-viewmodel/1939606 # 1939606 –