2010-09-22 28 views
5

Tôi có một nút trên một chế độ xem được giới hạn qua RoutedUICommand đến một lệnh được xác định trong ViewModel.Cách sử dụng văn bản lệnh được định tuyến làm nội dung nút

Mã XAML đoạn trích từ quan điểm:

<Button Content="Login" Command="{Binding Login}" /> 

Trong thập niên Xem CodeBehind tôi thêm các ràng buộc từ ViewModel vào bộ sưu tập ràng buộc của xem lệnh:

this.CommandBindings.Add(viewModel.LoginCommandBinding); 

ViewModel tự thực hiện các lệnh :

public class LoginViewModel:ViewModelBase 
{ 

    public ICommand Login { get; private set; } 
    public CommandBinding LoginCommandBinding { get; private set; } 

    public LoginViewModel() { 
     this.Login = 
      new RoutedUICommand("Login", "Login", typeof(Window)); 
     this.LoginCommandBinding = 
      new CommandBinding(Login, LoginCommandHandler, CanExecuteHandler); 
    } 

    void LoginCommandHandler(object sender, ExecutedRoutedEventArgs e) { 
     //Put code here 
    } 

    void CanExecuteHandler(object sender, CanExecuteRoutedEventArgs e) { 
     return true; 
    } 
} 

Vì vậy, lệnh được xác định bằng văn bản và na tôi cả "Đăng nhập". Bản thân nút có nội dung "Đăng nhập". Có cách nào để sử dụng văn bản lệnh như nội dung của nút không?

Trả lời

3

Chỉ cần liên kết với Tên hoặc Văn bản tài sản trong lệnh, như vậy:

 <Button x:Name="btnName" 
       Command="{Binding ThisIsMyCommand}" 
       Content="{Binding ThisIsMyCommand.Name}" /> 

     <Button x:Name="btnText" 
       Command="{Binding ThisIsMyCommand}" 
       Content="{Binding ThisIsMyCommand.Text}" /> 
0

tôi không có cơ sở hạ tầng để thử nghiệm này ngay bây giờ, nhưng lưu niệm của tôi về vấn đề này là các nút nên tự động sử dụng văn bản RoutedUICommand làm nội dung của nó.

Bạn đã thử xóa thuộc tính Nội dung chưa?

+0

Vâng, tôi đã nghe nói rằng điều này sẽ làm việc. Đó là lý do tôi hỏi. Và không, việc loại bỏ thuộc tính Nội dung khỏi mã xaml không thực hiện thủ thuật. Nút này vẫn trống. – PVitt

+0

OK, xin lỗi, nó thực sự có vẻ quá dễ dàng một câu hỏi ... – Timores

5

Cách tốt nhất để đạt được điều này là để ràng buộc nó trở lại bằng cách sử dụng phần mở rộng đánh dấu RelativeSource ví dụ Command="Cmds:MyCommands.TestCmd" Content="{Binding RelativeSource={RelativeSource Self}, Path=Command.Text}"

+0

Điều này là tái sử dụng nhiều hơn. Cảm ơn. –

12

Bạn có thể nhận được văn bản lệnh tự động cho mỗi nút.

Đặt tệp này vào tệp Application.xaml của bạn.

<Style TargetType="Button"> 
    <!--Default Button content to be the Text provided from the Command.--> 
    <Setter Property="Content" 
      Value="{Binding RelativeSource={RelativeSource Self}, 
      Path=Command.Text}"/> 
</Style> 

Từ ...

http://leecampbell.blogspot.com/2008/12/wpf-commandtext.html

Các vấn đề liên quan