0

私はまだCaliburn.microを学んでいるので、これはばかげた質問かもしれません。GridViewを内部に持つListViewがあります。行をクリックして、ListViewの外にあるTextBlockのテキストを変更できるようにしたい。

<TextBlock x:Name="titleText" Grid.Row="6" Grid.Column="4" Text="View a report of all current applications" TextWrapping="Wrap" Margin="5" VerticalAlignment="Center" FontWeight="Bold" />


    <ListView VerticalAlignment="Stretch" HorizontalAlignment="Stretch" Name="listView1" SelectedItem="{Binding Key}" ItemContainerStyle="{DynamicResource CustomListViewItemStyle}" AlternationCount="2" 
              ItemsSource="{Binding}" DataContext="{StaticResource OrderGroup}" Grid.Column="2" Grid.Row="10" Grid.ColumnSpan="5" Height="200"  cal:Message.Attach="[Event MouseLeftButtonUp]=[Action HandleClick($eventArgs)]">
        <ListView.View>
            <GridView AllowsColumnReorder="False" x:Name="GridView1">
                <GridViewColumn Header="Client Name" DisplayMemberBinding="{Binding Path=ClientName}" ></GridViewColumn>
                <GridViewColumn Header="Application ID" DisplayMemberBinding="{Binding Path=ID}" ></GridViewColumn>
            </GridView>
        </ListView.View>
    </ListView>

ご覧のとおり、MountLeftButtonUpイベントを処理するためにcal:Message.Attachを呼び出しています。

これにより、次のコードが呼び出されます。

public void HandleClick(RoutedEventArgs e)
    {
        titleText= "SOME TEST HERE"; 
    }

そして、titleText(私が更新しようとしているTextBlock)は次のように定義されています:

String _titleText = "";
    public string titleText
    {
        get { return _titleText; }
        set
        {
            if (_titleText != value)
            {
                _titleText = value;
                NotifyOfPropertyChange(() => _titleText);
            }
        }
    }

ただし、これはTextBlockを更新しません。コードに足を踏み入れると、コード内でtitleTextが変更されているのがわかりますが、表示されません。また、これを変更して、画像をクリックしたときに同じことを実行すると、正常に機能しました。

それで、私がここで見逃しているかもしれない何かがありますか?Caliburn.microの経験がある人。

ありがとう。

マダーズ

4

1 に答える 1

0

解決策は Coding Gorilla によって提供されました - titleText 宣言でそれを見逃していました。プライベートメンバーではなく、プロパティを呼び出す必要がありました-次のように:

String _titleText = "";
    public string titleText
    {
        get { return _titleText; }
        set
        {
            if (_titleText != value)
            {
                _titleText = value;
                NotifyOfPropertyChange(() => titleText);
            }
        }
    }

それを変更すると、うまくいきました。つまり、問題が見られないという単純なケースです。ありがとう。

于 2012-08-24T05:54:24.197 に答える