0

クラスがあり、そのプロパティの1つが構造体である単純なプロジェクトを実行しようとしています。この構造には値が含まれています。そこで、ラベルコンテンツをこの値にバインドしたいと思います。これどうやってするの?

ありがとう!

4

3 に答える 3

1

上記のAkSkiの回答に追加するには...

構造体への双方向バインディング (読み取りと書き込み) または一方向バインディング (書き込みのみ) を使用している場合、期待どおりに動作しません。

構造体は常に値渡しであり、参照渡しではありません。つまり、WPF がバックグラウンドでそれらを渡すと、参照によって渡されるのではなく、新しい値としてコピーされます。これは、WPF が元の構造体ではなくコピーに書き込むことを意味します。

ソースへの双方向または一方向バインディングを実行する唯一の方法は、クラスにバインドすることです。

この構造体の値を読み取り専用として表示するだけでよい場合は、上記の AlSki の回答に従ってください。

于 2012-10-04T19:54:58.867 に答える
0

それだけで機能します。例を次に示します。

景色 :

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition/>
            <RowDefinition/>
        </Grid.RowDefinitions>

        <Label Content="{Binding FinalDestination.X}"/>
        <Label Grid.Row="1" Content="{Binding FinalDestination.Y}"/>
    </Grid>
</Window>

ビューモデル:

using System.Windows;

namespace WpfApplication1
{
    public class ViewModel
    {
        public Point FinalDestination { get; private set; }

        public ViewModel()
        {
            FinalDestination = new Point(8, 8);
        }
    }
}

ビューの分離コード:

namespace WpfApplication1
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();

            DataContext = new ViewModel();
        }
    }
}

注 : 私は .NET 4.5 上の Visual Studio 2012 でこれを高速に構築しましたが、古いテクノロジでも動作することは確かです

于 2012-10-04T19:57:47.173 に答える
0

値を WPF システムに公開するには、DependencyProperty を宣言する必要があります。依存関係プロパティの概要を参照してください。クラスで依存関係プロパティを宣言し、構造体から値を抽出するだけの価値があるかもしれません。

既存の datat オブジェクトが単にバックエンド データ (またはモデル) 用である場合、この前に別のクラスを使用して WPF に公開することを検討することもできます。この新しいクラスは一般に ViewModel と呼ばれます。詳しい説明については、 MSDN の Josh Smith MVVM をご覧ください。

于 2012-10-04T19:53:33.453 に答える