Quantcast
Channel: かずきのBlog@hatena
Viewing all articles
Browse latest Browse all 1387

UWPのコンパイル時データバインディング(x:BInd)でPropertyChanged_XXXXXがないというコンパイルエラーが出るとき

$
0
0

UWPのコンパイル時データバインディングを試してたのですが、こんなコードを書いたら表題のようなコンパイルエラーが出るようになりました。

publicsealedpartialclass MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }
}

class MainPageVM : INotifyPropertyChanged
{
    publicstring Text { get; set; } = "Hello world";

    publicevent PropertyChangedEventHandler PropertyChanged;
}
<Pagex:Class="App43.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:App43"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Page.DataContext><local:MainPageVM x:Name="ViewModel" /></Page.DataContext><Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><TextBlock Text="{x:Bind ViewModel.Text, Mode=OneWay}" /></Grid></Page>

すると

現在のコンテキストに 'PropertyChanged_ViewModel' という名前は存在しません。

というエラーが出ます。

条件

ViewModelがINotifyPropertyChangedを実装していて、XAMLでx:Nameを使って変数宣言していて、Mode=OneTime以外を指定すると起きるっぽいです。

解決策

プロパティ化するなりフィールド化するなりしましょう。

publicsealedpartialclass MainPage : Page
{
    private MainPageVM ViewModel => this.DataContext as MainPageVM;
    public MainPage()
    {
        this.InitializeComponent();
    }
}

class MainPageVM : INotifyPropertyChanged
{
    publicstring Text { get; set; } = "Hello world";

    publicevent PropertyChangedEventHandler PropertyChanged;
}
<Pagex:Class="App43.MainPage"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"xmlns:local="using:App43"xmlns:d="http://schemas.microsoft.com/expression/blend/2008"xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"mc:Ignorable="d"><Page.DataContext><local:MainPageVM /></Page.DataContext><Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}"><TextBlock Text="{x:Bind ViewModel.Text, Mode=OneWay}" /></Grid></Page>

Viewing all articles
Browse latest Browse all 1387

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>