0

OK、カラーピッカーを使いたくて、Alex Yakhnin のブログを見つけました...

http://blogs.msdn.com/b/priozersk/archive/2010/09/17/customizing-picker-box-dialog.aspx

ブログからこのコードを実装した後:

  DialogViewModel viewModel;
    PickerBoxDialog customDialog;
    ColorItem currentColorItem;

    private void InitCustomPickerDialog()
    {
        // Initialize viewmodel
        this.viewModel = new DialogViewModel();
        this.currentColorItem = viewModel.Items[0];

        // Assing it to the page's DataContext
        this.DataContext = currentColorItem;
        this.customDialog = new PickerBoxDialog();
        this.customDialog.Title = "ACCENTS";

        // Assign our style to the dialog
        this.customDialog.Style = this.Resources["Custom"] as Style;
        this.customDialog.ItemSource = viewModel.Items;
        this.customDialog.Closed += new EventHandler(customDialog_Closed);
    }
    void customDialog_Closed(object sender, EventArgs e)
    {
        this.currentColorItem = (ColorItem)this.customDialog.SelectedItem;
        this.DataContext = currentColorItem;
    }
    private void buttonColor_Click(object sender, RoutedEventArgs e)
    {
        this.customDialog.Show();
    }

ページのデータコンテキストがピッカーの色を設定するために使用されていることに気付きました。この同じページでリストボックスを使用しています。これは、ページのデータコンテキストを設定して魚のリストを表示します。

 public FishsPage()
    {
        InitializeComponent();
        DataContext = App.vmFish;
        InitCustomPickerDialog();
    }

したがって、現在、2 つの異なる目的でページのデータコンテキストが必要です。カラー ピッカー コントロールとフィッシュ リストを同時に使用する方法はありますか?

エルノの提案?:

public class FishViewModelComplete : INotifyPropertyChanged
{
    private readonly ReefServiceClient wcfProxy;

    public FishViewModelComplete()
    {
        vmFish = new FishViewModel();
        vmDialog = new DialogViewModel();
    }

    private FishViewModel _vmFish;
    public FishViewModel vmFish
    {
        get
        {
            return _vmFish;
        }
        set
        {
            _vmFish = value;
        }
    }

    private DialogViewModel _vmDialog;
    public DialogViewModel vmDialog
    {
        get
        {
            return _vmDialog;
        }
        set
        {
            _vmDialog = value;
        }
    }

}
4

1 に答える 1

1

プロパティを介して 2 つの ViewModel を公開し、適切なコントロールをこれらにバインドする 3 番目の ViewModel を作成します。

于 2012-08-02T14:50:14.170 に答える