ورود

View Full Version : سوال: گم شدن تکست بلاک در گرید ویو :لبخند:



cazino86
شنبه 20 شهریور 1389, 19:29 عصر
سلام...

من یک گرید ویو دارم ک اون رو به شکل زیر آماده کردمش :


<ListView >
<ListView.View>
<GridView AllowsColumnReorder="true"
ColumnHeaderToolTip="Employee Information">
<GridViewColumn x:Name="ErrorType_Gridviewcolumn"
Header="Error Type" Width="100" DisplayMemberBinding="{Binding Path=Error_Type,ElementName=MainWindow,Mode=OneWay }">
<GridViewColumn.CellTemplate>
<DataTemplate >
<TextBlock Name="ErrorType_textblock" Text="{Binding Path=Error_Type,ElementName=MainWindow,Mode=OneWay }"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="ErrorDescription_GridviewColumn"
Header="Description" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Name="Errordescription_textblock" Text="{Binding Path=Error_Description,ElementName=MainWindow,Mode =TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="ErrorFile_GridviewColumn"
Header="File" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Name="Errorfile_textblock" Text="{Binding Path=Error_File,ElementName=MainWindow,Mode=TwoWay }"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="ErrorLine_GridviewColumn"
Header="Line" Width="Auto">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Name="Errorline_textblock" Text="{Binding Path=Error_Line,ElementName=MainWindow,Mode=TwoWay }"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>

</ListView.View>

</ListView>

خوب حالا زمانی که میخوام به تکست بلاک ها دسترسی داشته باشم تا متن اونها رو عوض کنم اصلا تکست باکس ها شناسایی نمیشن !

من میخوام که در زمان ران تایم هم بتونم مقدار متنی این تکست باکس ها رو عوض کنم یا در واقع مقدار متنی گرید GridViewColumn ها رو عوض کنم .چطوری باید این کار رو کنم ؟

من چند تا خاصیت پابلیک تعریف کردم و اونها رو به تکست بلاک ها و حتی به خود GridViewColumn بیند کردم اون هم به صورت TowWay. اما وقتی خاصیت ها تغییر میکنن هیچ متنی نمایش داده نمیشه !

mahdi7s
یک شنبه 21 شهریور 1389, 00:19 صبح
برای مطلع کردن UI از تغییر منبع بایند شده :
1)اگر می خواهید تغییر اطلاعات آرایه یا لیست را به UI گزارش دهید آن ها در یک ObservableCollection نگه دارید
2)اگر می خواهید تغییر اطلاعات یک خصیصه را به UI گزارش دهید رابط INotifyPropertyChanged رو در کلاس مربوطه پیاده کنید و پس از تغییر خصیصه ی مربوطه رویداد PropertyChanged رو Fire ! کنید

PropertyChanged(this, new PropertyChangedEventArgs("ChangedPropertyName"));
ChangedPropertyName = نام خصیصه مورد نظر

موفق باشید

cazino86
یک شنبه 21 شهریور 1389, 19:53 عصر
سلام ...

ها ای که گفتی ای یعنی چه ؟:لبخند:


2)اگر می خواهید تغییر اطلاعات یک خصیصه را به UI گزارش دهید رابط INotifyPropertyChanged رو در کلاس مربوطه پیاده کنید و پس از تغییر خصیصه ی مربوطه رویداد PropertyChanged رو Fire ! کنید

mahdi7s
یک شنبه 21 شهریور 1389, 21:47 عصر
ها ای که گفتی ای یعنی چه ؟:لبخند: چیزی نیست نترس:لبخند:

فرض کن یه کلاس به اسم DemoCustomer داری که دو تا خصیصه به اسم های CompanyName و PhoneNumber داره که می خوای وقتی تغییر می کنن این تغییر در UI و کنترل های بایند شده بهشون هم اعمال بشه برای این کار باید رابط INotifyPropertyChanged را در کلاس DemoCustomer پیاده کنی و در قسمت Set آن دو خصیصه آن کدی که گفتم رو بنویسی تا UI از تغییر باخبر بشه و خودش رو آپدیت کنه
برای دیدن کد کامل به لینک زیر یه نگاهی بنداز
http://msdn.microsoft.com/en-us/library/ms229614.aspx
موفق باشید

cazino86
دوشنبه 22 شهریور 1389, 20:57 عصر
سلام ...


من اين خصيصه ها رو در برنامه تعريف كردم . تو كلاس نذاشتمشون . تو قسمت بايند كد زير رو گذاشتم :

ElementName=MainWindo

البته اين نحوه بايند كردن ElementName رو براي خصيصه به فرم اصلي ارجاع ميده . تو قسمت set هم INotifyPropertyChanged رو فاير كردم اما توفيقي حاصل نشد .

مهدی فرزاد
سه شنبه 23 شهریور 1389, 00:02 صبح
سلام
یک مثال با یک روش دیگه برات گذاشتم ببین فکرکنم کارت رو راه میندازه

mahdi7s
سه شنبه 23 شهریور 1389, 00:50 صبح
نمونه کدی که نوشته اید را بگذارید ...

مهدی فرزاد
سه شنبه 23 شهریور 1389, 14:48 عصر
نمونه کدی که نوشته اید را بگذارید ...

کد کلاس Personal

class Personal
{
private string _FirstName;
private string _LastName;
private string _TelNumber;
private int _ID;
public string FirstName
{
get { return _FirstName; }
set { _FirstName = value; }
}
public string LastName
{
get { return _LastName; }
set { _LastName = value; }
}
public string TelNumber
{
get { return _TelNumber; }
set { _TelNumber = value; }
}
public int ID
{
get { return _ID; }
set { _ID = value; }
}
}

کد برنامه

int i;
List<Personal> p = new List<Personal> { };
private void button1_Click(object sender, RoutedEventArgs e)
{
i ++;
Personal Per = new Personal();
Per.FirstName = textBox1.Text;
Per.LastName = textBox2.Text;
Per.TelNumber = textBox3.Text;
Per.ID = i;
p.Add(Per);
var q = from a in p
select a;
ListViwe1.ItemsSource = q;
}
private void button2_Click(object sender, RoutedEventArgs e)
{
var q = (from a in p
where a.ID == Convert.ToInt32(textBox4.Text)
select a).SingleOrDefault();
if (q != null)
{
p.Remove(q);
var q2 = from a in p
select a;
ListViwe1.ItemsSource = q2;
}
else
{
MessageBox.Show("رکورد مورد نظر یافت نشد");
}
}

کد Xaml فرم

<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
x:Class="WpfApplication18.MainWindow"
x:Name="Window"
Title="MainWindow"
Width="640" Height="480">
<Grid x:Name="LayoutRoot">
<ListView x:Name="ListViwe1" Margin="16,16,12,0" Height="100" VerticalAlignment="Top">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding ID}" />
<GridViewColumn Header="First Name" DisplayMemberBinding="{Binding FirstName}"/>
<GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding LastName}"/>
<GridViewColumn Header="Tel Number" DisplayMemberBinding="{Binding TelNumber}"/>

</GridView>
</ListView.View>
</ListView>
<TextBox Height="23" HorizontalAlignment="Left" Margin="86,143,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="86,223,0,0" Name="textBox3" VerticalAlignment="Top" Width="120" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="471,143,0,0" Name="textBox4" VerticalAlignment="Top" Width="120" />
<Button Content="Add" Height="23" HorizontalAlignment="Left" Margin="106,263,0,0" Name="button1" VerticalAlignment="Top" Width="75" Click="button1_Click" />
<TextBox Height="23" HorizontalAlignment="Left" Margin="86,184,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" />
<Button Content="Del" Height="23" HorizontalAlignment="Left" Margin="493,169,0,0" Name="button2" VerticalAlignment="Top" Width="75" Click="button2_Click" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="448,143,0,0" Name="textBlock1" Text="ID :" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="13,226,0,0" Name="textBlock2" Text="Tel Number :" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="13,184,0,0" Name="textBlock3" Text="Last Name :" VerticalAlignment="Top" />
<TextBlock Height="23" HorizontalAlignment="Left" Margin="12,143,0,0" Name="textBlock4" Text="First Name :" VerticalAlignment="Top" />
</Grid>
</Window>

mahdi7s
سه شنبه 23 شهریور 1389, 19:37 عصر
کد کلاس Personal ...
ممنون ولی منظور من کد کاربر cazino86 بود
اما حالا که زحمتش را کشیدید و گذاشتید چند موضوع در مورد کدتان:

در آخر هر دو رویداد هندل شده برای دکمه ها اطاعات لیست تغییر داده شده را به query تبدیل کردید و ریختید توی ListView این در برنامه های سطح پایین که به پایگاه داده ی بزرگی متصل نیستند مشکلی پیش نمی آورد اما اگر کمی اطلاعات حجیم تر شود برنامه دار فانی را وداع می گوید
این در صورتی است که اطلاعات می توانند در یک ObservableCollection ریخته شوند و با یک بایند ساده ListView را متوجه تغییرات ایجاد شده در اطلاعات موجود در ObservableCollection بکنند.

وقت ندارم اما سعی می کنم بعدا تاپیکی در این مورد بزنم

موفق باشید

مهدی فرزاد
سه شنبه 23 شهریور 1389, 20:12 عصر
در آخر هر دو رویداد هندل شده برای دکمه ها اطاعات لیست تغییر داده شده را به query تبدیل کردید و ریختید توی ListView این در برنامه های سطح پایین که به پایگاه داده ی بزرگی متصل نیستند مشکلی پیش نمی آورد اما اگر کمی اطلاعات حجیم تر شود برنامه دار فانی را وداع می گوید

موفق باشید

سلام
ممنون از نظر و توجهتون ولی من این مثال رو دقیقا برای همچین برنامه هایی که اصلا به بانک متصل نیستن نوشتم دوستمون توی برنامش بانک نداره و فقط برای نمایش چند حالت خاص در برنامه میخواد از این روش استفاده کنه
بله برای بانک اطلاعاتی بزرگ کمی مشکل ساز میشه