【问题标题】:TextBlock.Text update ViewModel and CodeBehind WPFTextBlock.Text 更新 ViewModel 和 CodeBehind WPF
【发布时间】:2016-03-22 07:55:13
【问题描述】:

我正在尝试通过 CodeBehind(xaml.cs) 和 ViewModel Binding 设置 TextBlockText 属性。

默认情况下,值是从工作正常的 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覆盖。

我哪里错了?

【问题讨论】:

  • 你没有错。但是,如果您将数据上下文设置为远离您的视图模型-您将无法再更新 Textblock...顺便说一句,您到底为什么要这样做??
  • 在 XAML 中,您正在设置与 Text 属性的绑定。在您背后的代码中,您正在重置您的 Text 属性。因此,您的绑定失败了。

标签: c# wpf xaml mvvm


【解决方案1】:

如果你写test.Text = "Not Available";,那么你通过用简单的字符串覆盖它们来破坏数据绑定。如果您想完成,请使用数据绑定并从后面的代码中更改 TextBlock 值,然后您应该更新绑定:

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

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

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

【讨论】:

  • 对于第一个结果,我得到Object reference 错误(null 发生在test.GetBindingExpression(TextBlock.TextProperty)),对于第二个结果,文本在第二次单击按钮时发生变化,第一次保持不变点击这意味着它在点击 2 次后可以正常工作。
  • 因为它是一个 MultiBinding 它应该是这样的,BindingOperations.GetMultiBinding(test, TextBlock.TextProperty);。您能否使用此代码改进和更新?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 2023-04-03
  • 1970-01-01
  • 2011-11-08
  • 1970-01-01
  • 2021-01-19
  • 2013-06-08
相关资源
最近更新 更多