2017-05-02 20 views
-2

ViewModelから計算されたデータでラベルを更新する必要があります。これは、textBoxからのデータを使用してラベルに表示する必要があるテキストを計算するので、textBoxが更新されたときにトリガーされなければなりません。C#WPFテキストボックスから計算されたデータを持つMVVM更新ラベル

私の.xamlファイルは次のとおりです。

... 
<TextBox x:Name="tbSelectedValue" 
    PreviewTextInput="SelectedValue_PreviewTextInput" 
    KeyUp="SelectedValue_KeyUp" 
    Text="{Binding Path=SelectedValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 

    <TextBox.InputBindings> 
     <KeyBinding Key="Enter" Command="{Binding SelectFileCommand}" /> 
    </TextBox.InputBindings> 
</TextBox> 


<Label x:Name="lbSelectedFileName" 
    Content="{Binding Path=SelectedName, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 
... 

私のViewModelファイルは次のとおりです。

public string SelectedValue 
    { 
     get { return selectedValue; } 
     set { SetProperty(ref selectedValue, value); } 
    } 
    public string SelectedName 
    { 
     get { return selectedName; } 
     set { selectedName = value; } 
    } 


    internal string GetSelectName() 
    { 
     try 
     { 
      selectedValue = (selectedValue == "" ? "" : GetFileByNumber(Int32.Parse(selectedValue)).name); 
      return selectedValue; 
     } 
     catch (Exception e) 
     { 
      return "Nenhum arquivo encontrado"; 
     } 
    } 

SelectedValue作品が、SelectedNameは動作しません。

textBoxの値が更新されたとき(selectedValue)、関数GetSelectNameを呼び出す必要があります。私の関数GetSelectNameは、selectedNameプロパティを更新し、ビューで更新する必要があります。しかし、それは動作していません。

私は何をすべきですか?

+0

'Mode = TwoWay、UpdateSourceTrigger = PropertyChanged'です。なぜあなたはそのような旗を選んだのですか? 'SelectedName'のためにセッターを修正するのに特に効果があると思ったフラグについてはどうでしたか? –

+0

申し訳ありませんが、あなたの解決策を理解していません –

+0

問題でした。私は、 'Label.Content'上のバインディングに' Mode = TwoWay'を追加するというあなたの推論を求めていました。 –

答えて

1

@EdPlunkettによると、このコメントをまとめておきましょう。

プロパティ名の変更を通知できるようにSelectedNameを変更します。

public string SelectedName 
{ 
    get { return selectedName; } 
    set { 
     SetProperty(ref selectedName, value); 
    } 
} 

SelectedName プロパティへGetSelectName()方法の結果を割り当てます。

public string SelectedValue 
{ 
    get { return selectedValue; } 
    set 
    { 
     if (SetProperty(ref selectedValue, value)) 
     { 
      //If property value changes, update the name property as well 
      SelectedName = GetSelectedName(); 
     } 
    } 
} 

それは助けていますか?

+1

それは働いた。多くのことを試しても何も動かなかった後、私は自分のコードを失ってしまいました。 C#でbeguinnerとして、私は "SelectedName"と "selectedName"を使用すると、多くのことを混乱させていました。解決策は簡単で明確です。ありがとう –

関連する問題