그래서 목록에있는 항목의 수에 따라 userControl이있는 여러 개의 탭이 필요합니다. 윈도우가로드 일단데이터 컨트롤의 사용자 정의 컨트롤이 동기화되지 않음
<Window x:Class="xxxxx.extraforms.frmownedchamps"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:sp="clr-xxxxx.usercontrols.ucoptions"
Title="frmownedchamps" Height="593" Width="350" Loaded="Window_Loaded_1" ResizeMode="NoResize" WindowStyle="None" ShowInTaskbar="False">
<Grid>
<TabControl Name="thetabcontrol">
<TabControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<Label Content="{Binding name}" />
</StackPanel>
</DataTemplate>
</TabControl.ItemTemplate>
<TabControl.ContentTemplate>
<DataTemplate DataType="{x:Type sp:ucownedchampviewer}" >
<sp:ucownedchampviewer strname="{Binding Path=name}" strcode="{Binding Path=code}" clclist="{Binding Path=list}" teller="{Binding Path=teller}" />
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
</Grid>
</Window>
: 그래서 내가 tabcontroller을하고 (목록에 tabcontroler의)의 itemsource을 결합하는 새로운 윈도우로 시작 ....이 shoudn t 너무 열심히 할 생각하지만, thetabcontrol.ItemsSource = settings.clclist 만 수행합니다.
clclist
은 이것이다 : public static List<clc> clclist { get; set; }
public void methodblabla()
{
foreach(xml blabla)
{
clc clctemp = new clc(xmlname, xmlcode);
clclist.Add(clctemp);
}
}
the clc class is:
public class clc
{
private static int counter = 0;
public int teller { get; set; }
public String name { get; set; }
public String code { get; set; }
public ObservableCollection<champion> list { get; set; }
public clc(String name, String code)
{
this.name = name;
this.code = code;
teller = counter;
counter++;
makelist();
}
public void makelist()
{
var bytes = Convert.FromBase64String(code);
var values = new System.Collections.BitArray(bytes);
list = new ObservableCollection<champion>();
int aantal = champions.list.Count;
int teller = 0;
int counter = 0;
for (int x = aantal; x != 0; x--)
{
if (values[x - 1] == true)
{
list.Add(champions.getchampbyid(counter + 1));
teller++;
}
counter++;
}
}
}
내 UserControl을 :
mayby 더 나은 너무 많은 다음<UserControl x:Class="xxxxx.usercontrols.ucoptions.ucownedchampviewer"
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:sp="clr-namespace:xxxxx"
mc:Ignorable="d"
d:DesignHeight="564" d:DesignWidth="350" Loaded="UserControl_Loaded">
<Grid Height="624">
<Grid.Resources>
<Style x:Key="Ownedstyle" TargetType="{x:Type ListViewItem}">
<Setter Property="Background" Value="Red"></Setter>
<Style.Triggers>
<DataTrigger Binding="{Binding strowned}" Value="Yes">
<Setter Property="Background" Value="Green"></Setter>
</DataTrigger>
</Style.Triggers>
</Style>
</Grid.Resources>
<StackPanel Margin="0,0,0,12">
<StackPanel Orientation="Horizontal" Margin="5">
<TextBox Name="txtclc" Width="250" Margin="2" Text="{Binding Path=strcode ,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" />
<Button Name="btnload" Content="Save" Click="btnsave_Click" Width="55" Margin="2"/>
</StackPanel>
<Line Margin="2" />
<StackPanel Orientation="Horizontal" Margin="5" HorizontalAlignment="Stretch" Width="350">
<TextBlock VerticalAlignment="Center">Filter:</TextBlock>
<TextBox Name="txtfilter" Height="30" Grid.Column="0" TextChanged="txtfilter_TextChanged" Margin="5" Width="250" />
<Label Name="lblaantal"></Label>
</StackPanel>
<ListView Name="lsvallchamps" Grid.Column="0" Grid.Row="1" Grid.RowSpan="1" Height="410" Width="auto" ItemContainerStyle="{StaticResource Ownedstyle}" ItemsSource="{Binding Path=clclist ,RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}}" >
<ListView.View>
<GridView>
<GridViewColumn Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<Image HorizontalAlignment="Center" VerticalAlignment="Center" Width="50" Height="50" Source="{Binding image}" Stretch="Fill"></Image>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn Width="120" DisplayMemberBinding="{Binding name}">
<GridViewColumnHeader Content="name" Tag="name" Click="SortClick"/>
</GridViewColumn>
<GridViewColumn Width="130" DisplayMemberBinding="{Binding strroles}">
<GridViewColumnHeader Content="strroles" Tag="strroles" Click="SortClick" />
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
<Button Content="testknop" Click="Button_Click" />
<Button Content="Hide" Name="btnhide" Width="150" Height="35" Margin="5" Click="btnhide_Click"></Button>
</StackPanel>
</Grid>
</UserControl>
너무 많은 코드에 대한 죄송합니다,하지만 너무 적은 코드. 문제는 단추 btnsave를 txtclc.text를 코드에 저장하고 새 목록을 만들려는 것입니다. (그리고 나서 listview는 바인드 된 이후 자동으로 바뀌어야합니다) 그러나 일단 사용하면 코드
private void btnsave_Click(object sender, RoutedEventArgs e)
{
settings.clclist[teller].code = txtclc.Text;
settings.clclist[teller].makelist();
}
변경합니다! debug.writeline을 통해 clclist에서 값이 변경되었음을 알 수 있습니다. 그러나이 탭의 목록보기는 바뀌지 않습니다! 다른 탭으로 이동 한 다음 첫 번째 탭으로 돌아 가면 오른쪽 챔피언과 변경됩니다. 2 번째 문제가 있습니다. O하지만 다른 탭 (usercontrol)으로 가면 txtclc.text가 첫 번째 탭으로 변경됩니다! 또한 목록은 usercontrol에서 업데이트되지 않습니다. 그러나 makelist 방법은 그것을 변경해야합니까? 그러나이 긴 질문에 대해 유감스럽게 생각하지만 나는이 문제에 대해 많은 답변을 얻지 못했습니다.
해결책 :
것은 = 텍스트 바꾸기 "{바인딩 경로 = strcode, RelativeSource = {RelativeSource AncestorType = {X : 유형의 UserControl}}}"텍스트 = "{바인딩 경로 = 코드}"의 usercontrol. INotifyPropertyChanged를 clc 클래스에 추가하십시오. Thx from Rachel!
Ty for this! 나는 INotifyPropertyChanged를 암시했다. UI가 업데이트되어야한다. :) 그러나 당신이 또한 당신이 무엇을 의미하는지 알아낼 수 없다는 답을 제공 한 제 2 문제 : txtclc의 텍스트를 저장하기 위해 내 datacontext에 속성을 추가하십시오. 나는 데이터 액터 텍스트를 가지고있다 : p. 당신이 의미하는 바는 이제 google이 될 것입니다. 그러나 내가 excatly해야만하는 것은 조금 더 많은 정보가 매우 달콤 할 것입니다. 그러나 이미 감사합니다!:) – Maximc
@ Maximc 여러분의 경우'DataContext'는 객체'clc'의 인스턴스처럼 보이므로 거기에 속성을 추가하십시오. DataContext가 어딘가에서 작동하는 방법에 대한 작은 예제를 작성했다는 것을 기억합니다. 찾을 수 있는지 보겠습니다. – Rachel
@Maximc 찾았습니다. 내 대답 [여기] (http://stackoverflow.com/a/7262322/302677) – Rachel