MVVM Light를 사용하는 샘플 프로젝트에서 작업 중이며 TextBox Text 값을 바인딩하고 View에서 전달하는 방법이 궁금합니다. 보기 모델에. MVVM Light로 작업 한 것은 이번이 처음이므로 새로운 기능입니다.Mvvm Light에서 TextBox의 값을 viewmodel에 바인딩하는 방법
기본적으로 사용자는 텍스트 상자 이름에 프로젝트 이름을 입력하고 프로젝트 이름 텍스트 상자에 입력 한 이름을 따라 이름 지정된 데이터베이스를 생성해야하는 새 프로젝트 버튼을 클릭합니다.
보기 :
<UserControl x:Class="Sample.Views.NavigationTree.NewProjectView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:mui="http://firstfloorsoftware.com/ModernUI"
xmlns:ignore="http://www.ignore.com"
mc:Ignorable="d ignore"
DataContext="{Binding NewProjectView, Source={StaticResource Locator}}">
<Grid>
<StackPanel Orientation="Vertical" HorizontalAlignment="Left">
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<mui:BBCodeBlock BBCode="Project Name"/>
<Label Width="10"/>
<TextBox Text="{Binding ProjName, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" Width="120"/>
</StackPanel>
<Label Height="10"/>
<StackPanel Orientation="Horizontal" HorizontalAlignment="Left">
<Label Width="85"/>
<Button Content="New Project" Margin="0,0,3,0" Command="{Binding AddProjectCommand}" IsEnabled="{Binding IsUserAdmin}" Grid.Column="2" Grid.Row="0"/>
</StackPanel>
</StackPanel>
</Grid>
</UserControl>
뷰 모델 :
using Sample.Model.Database;
using GalaSoft.MvvmLight;
using GalaSoft.MvvmLight.Command;
using System.Text;
namespace Sample.ViewModel
{
/// <summary>
/// This class contains properties that a View can data bind to.
/// <para>
/// See http://www.galasoft.ch/mvvm
/// </para>
/// </summary>
public class NewProjectViewModel : ViewModelBase
{
private string _projName;
//Binding AddProjectCommand
public RelayCommand AddProjectCommand { get; set; }
private string consoleText { get; set; }
private StringBuilder consoleBuilder = new StringBuilder(360);
/// <summary>
/// Initializes a new instance of the NewProjectViewModel class.
/// </summary>
public NewProjectViewModel()
{
this.AddProjectCommand = new RelayCommand(() => AddProject());
}
public void AddProject()
{
ProjectDbInteraction.CreateProjectDb(_projName);
}
public string ProjName
{
get { return _projName; }
set
{
if (value != _projName)
{
_projName = value;
RaisePropertyChanged("ProjName");
}
}
}
public string ConsoleText
{
get { return consoleText; }
set
{
consoleBuilder.Append(value);
consoleText = consoleBuilder.ToString();
RaisePropertyChanged("ConsoleText");
}
}
}
}
그래서 나는 PROJNAME가하고보기 모델로보기 바인딩 통과 어떻게?
전체보기 및보기 모델을 추가했습니다. – yams
입력란에 사용자 유형을 지정하여 ProjName 속성을 설정하려고합니까? 그렇다면 거기에 바인딩하는 편도를 사용할 수 없습니다. 그것을 제거하거나 원하는 경우 TwoWay 또는 OneWayToSource로 설정하십시오. OneWay는 귀하의 뷰 모델에서 오는 가치 일뿐입니다 –
오, 이런 말이 맞아. DId는 그것에 대해서 생각조차하지 않습니다. – yams