Run コントロールの Text プロパティのバインドが「機能しない」と言うとき、正しいオブジェクトにバインドしていると確信していますか? (ビューモデルでプロパティが適切に宣言されているかどうかという明らかな質問も含めていますが、それを確認し、ゲッター/セッターのスコープが適切であることを確認したと仮定します)。私はこの方法論をいくつかのアプリで広く使用していますが、問題はありません。原因を絞り込むのに役立つバインディング エラーが出力ウィンドウに表示されていますか?
ビューで必要なことを実行できないことが完全に確信できるまで、まだビューモデルにプロパティを追加しないことをお勧めします-後で要件が変更され、(たとえば)前景色のカラーコンバーターを適用したい場合はどうなりますか?価値観の一つ?
編集
動作することを示す簡単なデモ プロジェクトをまとめました。VS -> ファイル -> 新規 -> プロジェクト -> 空のアプリ (XAML) で MainPage.xaml と MainPage.Xaml.cs を編集しました。ファイルの全文は次のとおりです...
MainPage.Xaml
<Page
x:Class="RunDemo.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:RunDemo"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<Grid Background="{StaticResource ApplicationPageBackgroundThemeBrush}">
<!-- added from here... -->
<TextBlock FontSize="36" HorizontalAlignment="Center" VerticalAlignment="Center">
<Run Text="{Binding Usage}"/>
<Run Text=" / "/>
<Run Text="{Binding Total}"/>
</TextBlock>
<!-- ...to here. -->
</Grid>
</Page>
メインページ、xaml.cs
using System.ComponentModel;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Navigation;
// The Blank Page item template is documented at http://go.microsoft.com/fwlink/?LinkId=234238
namespace RunDemo
{
/// <summary>
/// An empty page that can be used on its own or navigated to within a Frame.
/// </summary>
public sealed partial class MainPage : Page
{
public MainPage()
{
this.InitializeComponent();
}
/// <summary>
/// Invoked when this page is about to be displayed in a Frame.
/// </summary>
/// <param name="e">Event data that describes how this page was reached. The Parameter
/// property is typically used to configure the page.</param>
protected override void OnNavigatedTo(NavigationEventArgs e)
{
base.OnNavigatedTo(e);
DataContext = new DummyViewModel();
}
}
public class DummyViewModel : INotifyPropertyChanged
{
private int total = 15;
private string usage = "ten";
public int Total
{
get
{
return total;
}
set
{
total = value;
OnPropertyChanged("Total");
}
}
public string Usage
{
get
{
return usage;
}
set
{
usage = value;
OnPropertyChanged("Usage");
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void OnPropertyChanged(string propertyName)
{
if(null != PropertyChanged)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}