Cách đơn giản nhất trong WPF để bật số Button
khi người dùng nhập nội dung gì đó vào một số TextBox
là gì?Cách bật nút khi người dùng nhập vào hộp văn bản
Trả lời
Sử dụng lệnh đơn giản
<TextBox Text={Binding Path=TitleText}/>
<Button Command="{Binding Path=ClearTextCommand}" Content="Clear Text"/>
Đây là đoạn mã mẫu trong Xem Mẫu
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));
}
}
Để biết thêm thông tin, xem Marlon Grechs SimpleCommand
Ngoài ra kiểm tra Mẫu Dự án MVVM/Bộ công cụ từ http://blogs.msdn.com/llobo/archive/2009/05/01/download-m-v-vm-project-template-toolkit.aspx. Nó sử dụng DelegateCommand để chỉ huy và nó phải là một mẫu khởi đầu tuyệt vời cho bất kỳ dự án nào.
Thêm gọi lại vào Hộp văn bản kích hoạt trên mọi hành trình. Kiểm tra tính trống rỗng trong gọi lại như vậy và bật/tắt nút.
NẾU bạn không sử dụng Lệnh, cách khác là sử dụng Trình chuyển đổi.
Ví dụ, sử dụng một Int tổng quát để bool chuyển đổi:
[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
}
Sau đó, trên các nút sở hữu IsEnabled:
<Button IsEnabled={Binding ElementName=TextBoxName, Path=Text.Length, Converter={StaticResource IntToBoolConverter}}/>
HTH,
Dennis
Sử dụng một kích hoạt !
<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>
Tại sao mọi người làm mọi thứ trở nên phức tạp!
<TextBox x:Name="TB"/>
<Button IsEnabled="{Binding ElementName=TB,Path=Text.Length}">Test</Button>
Không có gì khác cần thiết ......
Mấu chốt về vấn đề này là về các ràng buộc bản thân ..
Thêm UpdateSourceTrigger = PropertyChanged
đây là giải pháp đơn giản nhất
+1 đơn giản và hoạt động - cảm ơn! –
U, ser, là một thiên tài! –
Ước gì tôi có thể upvote điều này hơn – cppguy