2015-02-25 4 views
0

Я новичок в WPF. Мой код выглядит следующим образом:Как связать логическое значение с меткой

В моей MainWindow.xaml

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="10*"/> 
     <RowDefinition Height="50"/> 
    </Grid.RowDefinitions> 
    <Label HorizontalAlignment="Left" Margin="63,30,0,0" Grid.Row="0" VerticalAlignment="Top" Content="{Binding myVal}" Height="39" Width="71"/> 
    <Button Grid.Row="1" x:Name="btnSelect" Content="Select" Click="btnSelect_Click_1" Margin="396,0,10,0"/> 
</Grid> 

и MainWindow.cs

public partial class MainWindow : Window, INotifyPropertyChanged 
{ 
    private bool _myboolVal; 
    public MainWindow() 
    { 
     InitializeComponent(); 
     DataContext = this; 
    } 

    private void btnSelect_Click_1(object sender, RoutedEventArgs e) 
    { 
     if (myVal== false) 
     { 
      myVal = true; 
     } 
     else 
     { 
      myVal= true; 
     } 
    } 

    public bool myVal 
    { 
     get { return _myboolVal; } 
     set { _myboolVal= value; OnPropertyChanged("myVal"); } 
    } 

    private void OnPropertyChanged(string p) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(p)); 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 
} 

Но значение метки всегда false.

+0

Это должно сработать. Отследите его в отладочном режиме. – Paparazzi

+0

Если утверждение бесполезно, вы можете просто присваивать true 'myVal' –

+0

У вас есть' myVal = true; 'в обоих случаях' if' и 'else'. Кроме того, если вы хотите оставаться верным шаблону MVVM, вы должны иметь свое событие в 'ViewModel'. –

ответ

2

Ваша логика в btnSelect_Click_1 неверна. Обновите его до:

private void btnSelect_Click_1(object sender, RoutedEventArgs e) 
{ 
    myVal = !myVal; 
} 
+0

Спасибо .. это работало довольно хорошо – Rohit

+0

@kyle Если это ответ, то несовместимый с утверждением проблемы «Но значение метки всегда ложно» , – Paparazzi

0

взглянуть на эту sample (MVVM, команда связывания, MVVMLight)

+0

Я хочу изменить значение метки при каждом нажатии – Rohit

+0

@kyle: вы можете привязать текстовое оповещение. ярлыка к соответствующему свойству viewmodel и изменить его в Command.Execute –

0

Пожалуйста, установите режим TwoWay, и он будет работать.

Содержимое = "{Связывание myVal, Mode = TwoWay}"