2013-07-01 12 views
0

양식에 텍스트 상자가 있다고 가정 해 봅시다. 사용자가 원하는대로 입력 할 수 있습니다. OneWay 바인딩이 문자열 속성에 설정되어 있으므로 ViewModel이 속성을 변경할 때 텍스트 상자 업데이트. 이제 사용자가 텍스트 상자의 값을 수동으로 변경하면 어떻게됩니까? 텍스트 상자의 새 값으로 바인딩을 덮어 씁니까? 아니면 그냥 값을 기억하고 바인딩을 유지합니까? 다음 번에 ViewModel에서 속성을 업데이트 할 때 변경 사항이 UI에 반영됩니까? 사용자가 수동으로 값을 변경하는 경우Silverlight OneWay 바인딩

+1

까지 OnPropertyChanged ("MyText")를 호출하는 한 사용자가 viewmodel의 값을 다시 표시하기 때문에 사용자는 view에서 viewmodel 값을 얻지 못합니다. 당신은 쉽게 testproject를 설정할 수 있습니다. – blindmeis

+0

그래서 위의 시나리오에서 바인딩을 삭제하지 않습니까? –

답변

1
public class VM : INPCBase 
{ 
    private string _myText; 
    public string MyText 
    { 
     get { return _myText; } 
     set { _myText = value; this.NotifyPropertyChanged(()=>MyText);} 
    } 

    public void Blup() 
    { 
     this.MyText = "blup"; 
    } 
} 

public partial class MainWindow : Window 
{ 
    private VM data = new VM(); 
    public MainWindow() 
    { 
     InitializeComponent(); 
     data.MyText = "sdfjksj"; 
     this.DataContext = data; 
    } 

    private void button1_Click(object sender, RoutedEventArgs e) 
    { 
     this.data.Blup(); 
    } 

    } 

XAML

<TextBox Text="{Binding MyText, Mode=OneWay}"/> 
<Button Click="button1_Click" /> 

바인딩은 여전히 ​​상관없이 작동합니다. 하지만 OneWay