3

これについて非常に混乱しました-答えが本当に明白である場合は申し訳ありませんが、私はプログラミングにまったく慣れていません。

メイン ビュー内のコンテンツ コントロールに読み込まれるビューとして設定されたユーザー コントロールがあります。ユーザー コントロール (SetView と呼ばれる) のデータ コンテキストは、MainView で設定されます。SetView を UserControlVM (SetVM と呼ばれる) にバインドできます。

SetVM で、作成したクラスの ObservableCollection をロードします。

    public class WeightSet : Weights
{


    public string BodyArea { get; set; }
    public string ExerciseType { get; set; }
    public int SetNumber { get; set; }
    public static ObservableCollection<int> Reps { get; set; }


    #region Constructor


    //This is the main constructor
    public WeightSet(string bodyarea, string exerciseType, int setNumber)
    {
        BodyArea = bodyarea;
        ExerciseType = exerciseType;
        SetNumber = setNumber;
        Reps = new ObservableCollection<int>();
        AddReps();

    }

    #endregion Constructor

    #region Methods

    public void AddReps()
    {
        for (int i = 1; i < 100; i++)
        {
            Reps.Add(i);
        }
    }
    #endregion Methods

私の SetView には、ItemsSource が ListView である

public ObservableCollection<WeightSet> Sets

ListView の xaml は次のとおりです。

<UserControl x:Class="CalendarTest.SetView"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:forcombo="clr-namespace:CalendarTest.Model.Repository.Local_Data"
         xmlns:VM="clr-namespace:CalendarTest.ViewModel"
         mc:Ignorable="d" 
         d:DesignHeight="165" d:DesignWidth="300">
<Grid >
    <StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label Content="{Binding CurrentExercise}" Width="100" Height="40"></Label>
        <Label Content="{Binding BodyArea}" Width="100" Height="40"></Label>

    </StackPanel>
        <ListView ItemsSource="{Binding Sets}">
            <ListView.View>
                <GridView>
                    <GridViewColumn Header="Set Number" DisplayMemberBinding="{Binding Path=SetNumber}" Width="100"></GridViewColumn>
                    <GridViewColumn Header="Select Reps" Width="120">
                        <GridViewColumn.CellTemplate>
                            <DataTemplate>
                                <ComboBox Width="100" ItemsSource="{Binding Source={x:Static forcombo:WeightSet.Reps }}" ></ComboBox>
                            </DataTemplate>
                        </GridViewColumn.CellTemplate>

                    </GridViewColumn>
                    <GridViewColumn DisplayMemberBinding="{Binding Path=Reps}"></GridViewColumn>
                </GridView>
            </ListView.View>


        </ListView>
    </StackPanel>

</Grid>

SetView をロードすると、セット番号のリストと staticlist を含むコンボボックスが表示されます。ここにショットがあります:

ここに画像の説明を入力

コンボボックスの選択したアイテムをViewModelにバインドできないようです。選択した項目を WeightSet クラスに設定する方法はありますか? 選択した番号を保存できるようにする必要がありますか?

ComboBox の数はユーザーによって決定されるため、プロパティにバインドすることはできません。私の現在のデザインに対するヒントや修正は大歓迎です

4

2 に答える 2

1

コンボボックスにプロパティをバインドSelectedItemし、WeightSet クラスに依存関係プロパティを追加できます。

xaml:

<ComboBox ItemsSource="{Binding Source={x:Static forcombo:WeightSet.Reps }}"
          SelectedItem="{Binding SelectedItem}" />

とプロパティ

public static readonly DependencyProperty SelectedItemProperty =
    DependencyProperty.Register("SelectedItem", typeof (int), typeof (WeightSet), new PropertyMetadata(default(int)));

public int SelectedItem {
    get { return (int) GetValue(SelectedItemProperty); }
    set { SetValue(SelectedItemProperty, value); }
}

次にSelectedItem、コンボボックスで値が選択されると、セットのインスタンスが更新されます。

于 2012-08-31T01:08:43.940 に答える
0

ここで重要なのは、コンボボックスの SelectedItem 依存関係プロパティをビュー モデルの適切なプロパティにバインドすることです。

まず、Weightset クラスにINotifyPropertyChangedを実装する必要があります。

次に SelectedRep という WeightClass のプロパティを導入します。これは次のようになります。

int _selectedRep;
///<summary>Gets or sets SelectedRep.</summary>            
public int SelectedRep
{
    get { return _selectedRep; }
    set { _selectedRep = value; OnPropertyChanged("SelectedRep"); }
}

最後に、ComboBox の SelectedItem を SelectedRep プロパティにバインドするように Xaml を変更します。

<ComboBox Width="100" ItemsSource="{Binding Source={x:Static forcombo:WeightSet.Reps }}"  SelectedItem="{Binding SelectedRep, Mode=TwoWay}" />
于 2012-08-31T02:08:24.757 に答える