TextBlock.Text更新ViewModel和CodeBehind WPF

时间:2016-03-22 07:55:14

标签: c# wpf xaml mvvm

我正在尝试从CodeBehind(xaml.cs)和Text Binding设置TextBlock ViewModel属性。

默认情况下,值从ViewModel加载,工作正常。

XAML:

<TextBlock Name="test">
    <TextBlock.Text>
        <MultiBinding StringFormat=" ({0}, {1} of {2})">
            <Binding Path="SeriesId" />
            <Binding Path="SeriesName" />
            <Binding Path="SeriesCalc" />
        </MultiBinding>
    </TextBlock.Text>
</TextBlock>

XAML.cs

在按钮点击事件中尝试了以下内容,

test.DataContext = "Not Available";

或者

test.Text = "Not Available";

视图模型:

在另一个按钮Command中,我正在尝试将值分配给TextBlock

   SeriesId= GetIds();
   SeriesName= GetNamesWithDE();
   SeriesCalc= CalculateValue();

但是,一旦从后面的代码设置了“Not Available”,就无法从ViewModel覆盖它。

我哪里错了?

1 个答案:

答案 0 :(得分:2)

如果您编写test.Text = "Not Available";,则通过使用简单字符串覆盖数据绑定来破坏数据绑定。如果要完成,请使用数据绑定并更改后面代码中的TextBlock值,之后应更新绑定:

test.Text = "Not available";
test.GetBindingExpression(TextBlock.TextProperty).UpdateSource();

或使用SetCurrentValue方法设置依赖项属性的值而不更改其值源。

test.SetCurrentValue(TextBlock.TextProperty, "Not available");