C#WPF MVVM更新标签,其中包含从textBox计算的数据

时间:2017-05-02 14:54:05

标签: c# wpf mvvm data-binding

我需要使用从ViewModel计算的数据更新标签。更新textBox时必须触发这个,因为我将使用textBox中的数据来计算必须在标签中显示的文本。

我的.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属性,必须在视图中更新。但它不起作用。

我必须做什么?

1 个答案:

答案 0 :(得分:1)

根据@EdPlunkett评论,让我把它放在一起,看看它是否有帮助。

  

修改SelectedName,以便它可以通知属性更改。

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

GetSelectName()方法的结果分配给SelectedName   属性。

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

有帮助吗?