0

Windows Phone 7.1 アプリケーションに奇妙な例外があることに気付き、本当に頭がおかしくなりました。

これらは事実です...

次の 2 つの単純な内部Pivotを持つ単純なアイテムの定義を開始します。PivotItem

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <controls:Pivot>
        <controls:PivotItem x:Name="PivotItem1"
                            Header="Test1" />
        <controls:PivotItem x:Name="PivotItem2"
                            Header="{Binding Path=Text2, Mode=OneWay}" />
    </controls:Pivot>
    <Button Content="Test" Click="Button_Click" />
</Grid>

そして、これは私の分離コードです...

編集:Gambitが私に提案したように、より多くのコードを示します。

実際の状況では、私はMVVMを持っていますが、この場合、問題を簡単に再現できるように状況を単純化しました...

このテストでは、次は私のビューです:

public partial class MainPage : PhoneApplicationPage, INotifyPropertyChanged
{
    private string _text2 = "<Missing>";

    public string Text2
    {
        get
        {
            return _text2;
        }
        private set
        {
            _text2 = value;

            NotifyPropertyChanged("Text2");
        }
    }


    public MainPage()
    {
        InitializeComponent();
    }

    private void PhoneApplicationPage_Loaded(object sender, RoutedEventArgs e)
    {
        this.DataContext = this;
    }


    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }


    private void Button_Click(object sender, RoutedEventArgs e)
    {
        this.Text2 = "Second page";
    }
}

したがって、NULL値のパラメーターの初期化だけではありません。例外が表示されます。

controls明らかに、名前空間の宣言を求めています。これは:

xmlns:controls="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone.Controls"

Microsoft.Phone.Controls.dllこれは、バージョン2.0.50727のアセンブリを指します。

私の問題はバインディングに関連しています(問題を調査して発見したため):

Header="{Binding Path=Text2, Mode=OneWay}"

Headerのプロパティにリンクされたバインディングを使用しない場合PivotItem、すべてが正常に機能します。それ以外の場合、アプリは例外をスローし、完全にサイレントになり、どのような場合でも表示されません (例外は出力ウィンドウ):

A first chance exception of type 'System.Exception' occurred in System.Windows.dll

プロパティを手動で割り当てた場合Header、例外はスローされません。

この例外を完全に削除したいのは、Header プロパティへのバインドがたくさんあるためです。MVVM を壊したくありません。また、非常に面倒です。

管理されていない例外を見るのは本当に嫌いです...

誰もこの問題について知っていますか?

解決策/回避策はありますか?

どんな助けでも大歓迎です...ありがとう!

4

1 に答える 1

0

提供されたコードに基づいて、DataContext が設定されていないことが問題であると思われます。あなたの例では、 DataContext は PhoneApplicationPage_Loaded イベントで設定されています。ただし、このイベントに登録しているようには見えません。MainPage のコンストラクターで、次のような行を追加します。

this.Loaded += new RoutedEventHandler(PhoneApplicationPage_Loaded);
于 2012-08-29T16:44:30.130 に答える