ユーザーコントロールには、TextBox
と、Button
という1つのユーザーコントロールがあります。 TextBox
はインデックス値をとります。MVVMのユーザーコントロールとメイン間でコマンドをリンクする方法
私のMain
ビューには、ファイル内のすべての行を表示する1つのリストビューがあります。 ObservableCollection
はこれにバインドしています。
私はインデックス値は(メインで)ListView
のSelecedIndex
がインデックス値に変更する必要があり、(ユーザーコントロールに)TextBox
に入力され、表示Button
がクリックされた場合には、必要なもの。
MVVMを使用してこれを実現するにはどうすればよいですか?
また、私が間違っている場合は、これを行う適切な方法を教えてください。ここで
は私のUserControlコード:
XAML
<UserControl.DataContext>
<VM:IndexView_VM ></VM:IndexView_VM>
</UserControl.DataContext>
<Grid Background="White">
<TextBlock Margin="10,12,168,9" Text="Index : "/>
<TextBox Text="{Binding Index}" x:Name="TB_Index" Margin="53,11,90,8" />
<Button Command="{Binding View_CMD}" x:Name="BT_View" Content="View" Margin="136,11,10,8" />
</Grid>
のViewModel
public class IndexView_VM : ViewModelBase
{
public IndexView_VM()
{
View_CMD = new RelayCommand(_View_CMD);
}
int _Index;
public int Index
{
get { return _Index; }
set
{
_Index = value;
RaisePropertyChanged();
}
}
public RelayCommand View_CMD { get; set; }
internal void _View_CMD(object Parameter)
{
// What to write here?
}
}
ここでメインビューです:
XAML
<UserControl.DataContext>
<VM:MainView_VM></VM:MainView_VM>
</UserControl.DataContext>
<Grid Background="White">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="111*"/>
<ColumnDefinition Width="100*"/>
</Grid.ColumnDefinitions>
<StackPanel>
<local:IndexView/>
<local:IndexView/>
<local:IndexView/>
<local:IndexView/>
</StackPanel>
<ListView ItemsSource="{Binding FileData}" x:Name="listView" Grid.Column="1" >
<ListView.View>
<GridView>
<GridViewColumn Header="Data" Width="100"/>
</GridView>
</ListView.View>
</ListView>
</Grid>
ビューモデル
public class MainView_VM : ViewModelBase
{
public MainView_VM()
{
ReadFile();
}
public ObservableCollection<string> FileData { get; set; }
void ReadFile()
{
//I will read file here.
}
}
ボタンを使用するには、 'UpdateSourceTrigger = Explicit'を設定し、そのコードの中でUpdateSourceメソッドを使用します。 –
この場合、Binding(テキストボックス上のバインド)の方がより適切でしょう。 (テキストボックスは値をビューにプッシュします)。 ModeをOneWayToSourceに設定し、再びExplicit&UpdateSourceを使用します。 –