2009-05-04 9 views

उत्तर

0

उपयोग सरल कमान

<TextBox Text={Binding Path=TitleText}/> 

<Button Command="{Binding Path=ClearTextCommand}" Content="Clear Text"/> 

यहां व्यू मॉडल

public class MyViewModel : INotifyPropertyChanged 
{ 
    public ICommand ClearTextCommand { get; private set; } 

    private string _titleText; 
    public string TitleText 
    { 
     get { return _titleText; } 
     set 
     { 
      if (value == _titleText) 
       return; 

      _titleText = value; 
      this.OnPropertyChanged("TitleText"); 
     } 
    } 

    public MyViewModel() 
    { 
     ClearTextCommand = new SimpleCommand 
      { 
       ExecuteDelegate = x => TitleText="", 
       CanExecuteDelegate = x => TitleText.Length > 0 
      }; 
    }    

    public event PropertyChangedEventHandler PropertyChanged; 

    protected void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = this.PropertyChanged; 
     if (handler != null) 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
    }  
} 

में नमूना कोड में अधिक जानकारी देखने मार्लोन Grechs के लिए है SimpleCommand

इसके अलावा MVVM परियोजना टेम्पलेट की जाँच/टूलकिट http://blogs.msdn.com/llobo/archive/2009/05/01/download-m-v-vm-project-template-toolkit.aspx से। यह कमांडिंग के लिए DelegateCommand का उपयोग करता है और यह किसी भी प्रोजेक्ट के लिए एक महान प्रारंभिक टेम्पलेट होना चाहिए।

-1

टेक्स्टबॉक्स पर कॉलबैक जोड़ें जो हर स्ट्रोक पर आग लगती है। ऐसे कॉलबैक में खालीपन के लिए परीक्षण करें और बटन को सक्षम/अक्षम करें।

2

यदि आप कमांड का उपयोग नहीं कर रहे थे, तो दूसरा विकल्प कनवर्टर का उपयोग कर रहा है।

उदाहरण के लिए

, एक सामान्य इंट का उपयोग कर कनवर्टर bool करने के लिए:

[ValueConversion(typeof(int), typeof(bool))] 
    public class IntToBoolConverter : IValueConverter 
    { 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     try 
     { 
     return (System.Convert.ToInt32(value) > 0); 
     } 
     catch (InvalidCastException) 
     { 
     return DependencyProperty.UnsetValue; 
     } 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     return System.Convert.ToBoolean(value) ? 1 : 0; 
    } 

    #endregion 
    } 
फिर बटन IsEnabled संपत्ति पर

:

<Button IsEnabled={Binding ElementName=TextBoxName, Path=Text.Length, Converter={StaticResource IntToBoolConverter}}/> 

HTH,

डेनिस

2

उपयोग एक ट्रिगर !

<TextBox x:Name="txt_Titel /> 
<Button Content="Transfer" d:IsLocked="True"> 
    <Button.Style> 
    <Style> 
     <Style.Triggers> 
     <DataTrigger Binding="{Binding ElementName=txt_Titel, Path=Text}" Value=""> 
     <Setter Property="Button.IsEnabled" Value="false"/> 
     </DataTrigger> 
     </Style.Triggers> 
    </Style> 
    </Button.Style> 
</Button> 
103

हर कोई चीजों को इतना जटिल क्यों बना रहा है!

<TextBox x:Name="TB"/> 
    <Button IsEnabled="{Binding ElementName=TB,Path=Text.Length}">Test</Button> 

और कुछ नहीं की जरूरत ......

+4

+1 सरल और काम - धन्यवाद! –

+0

यू, सेर, एक प्रतिभाशाली हैं! –

+0

इच्छा है कि मैं इसे और अधिक बढ़ा सकता हूं – cppguy

0

इस पर कुंजी ही बाध्यकारी ..

पर है जोड़े UpdateSourceTrigger = PropertyChanged

यह है सबसे सरल समाधान

संबंधित मुद्दे

 संबंधित मुद्दे